Ruby:如何从数组内的整数中删除特定数字?

Posted

技术标签:

【中文标题】Ruby:如何从数组内的整数中删除特定数字?【英文标题】:Ruby: How to remove specific digits from integers that are inside an array? 【发布时间】:2018-06-29 19:38:11 【问题描述】:

我是编程新手。我想取一个整数数组,比如[155, 151, 2, 15] 并删除一个特定数字,在本例中为 5,然后将新数字相加。我已经把这个问题分解成更小的步骤,并得到了我想要的结果。我只是想知道是否有更简单的方法来解决这样的问题?也许我可以使用不同的方法?非常感谢任何帮助。

这是我的代码:

 arr = [155, 151, 2, 15]
# goal: remove the 5 digit from values and add 
#       new numbers together --> 1 + 11 + 2 + 1 == 15

# convert to arr of strings and delete zeros
str_arr = []
arr.each do |el|
  str_arr << el.to_s.delete('5')
end

# convert to arr of nums
num_arr = []
str_arr.each do |el|
  num_arr << el.to_i
end

# reduce num_arr
num_arr.reduce(:+)

【问题讨论】:

不是将元素推送到外部数组,而是使用map 返回一个映射值数组。例如,您的第一个示例 arr.map |e| e.to_s.delete('5') require 'json'; JSON.parse([155, 151, 2, 15].to_json.delete('5')).sum #=&gt; 15 怎么样? 【参考方案1】:

也许您可以使用 map 代替 each,这样您就不必将块内转换的每个元素推送到一个新的初始化数组,例如:

p [155, 151, 2, 15].map  |el| el.to_s.delete('5').to_i .reduce(:+)
# 15

如果使用 ruby​​ 2.4 或更高版本,您可以使用 Enumerable#sum 代替 reduce(这似乎是一个更快的选择)。

p [155, 151, 2, 15].sum  |el| el.to_s.delete('5').to_i 
# 15

【讨论】:

[155, 151, 2, 15].sum |el| el.to_s.delete('5').to_i 【参考方案2】:
arr = [155, 151, 2, 15]

arr.sum  |n| (n.digits - [5]).reverse.join.to_i 
  #=> 15

【讨论】:

digits 从 Ruby 2.4 开始可用。 谢谢@StefanPochmann。我忘记了digits 以低到高的顺序返回数字。我认为添加 reverse 可以解决这个问题,但它会使解决方案变得不那么理想。 是的,这很糟糕。我希望有一种相反方向的方法,从数字数组到整数。但显然他们忘记了这一点。 @SagarPandya 我前段时间在某个地方读到过,这是因为他们,基本上是divmod,在他们去的时候通过十个推到一个数组(因此首先去掉最低有效数字),然后一旦它进入他们可以反转阵列,也可以离开阵列。他们决定我们是否需要它,以便我们可以尽可能轻松地反转阵列,所以为什么要浪费时间做不是每个人都需要的工作,如果我们这样做的话,这对我们来说非常容易。但我找不到我在哪里读到的……可能不是官方的,可能只是我试图合理化它。 @SagarPandya 位值表示还可以更轻松地将数字转换回整数:digits.each_with_index.sum |d, i| d * base ** i 【参考方案3】:

使用eval:

eval(arr.join('+').delete('5'))    
#=> 15

使用inject:

arr.inject(0)|sum, element| element.to_s.delete('5').to_i + sum  
#=> 15

使用eval 的解决方案更有趣,但使用inject 的解决方案可以说更容易理解。干杯。

【讨论】:

以上是关于Ruby:如何从数组内的整数中删除特定数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何从字符串类型数组中删除整数?

2021-08-11:按要求补齐数组。给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用

算法:从数组中删除重复整数的有效方法

如何将 .txt 文件中的特定整数存储在结构数组中?

如何从字符串中删除特定单词 - Ruby

如何从数组中删除重复的数字?