Ruby: 如何从数组中的整数中删除特定数字?
Ruby: How to remove specific digits from integers that are inside an array?
我是编程新手。我想获取一个整数数组,例如 [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
而不是 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
arr = [155, 151, 2, 15]
arr.sum { |n| (n.digits - [5]).reverse.join.to_i }
#=> 15
使用eval
:
eval(arr.join('+').delete('5'))
#=> 15
使用 inject
:
arr.inject(0){|sum, element| element.to_s.delete('5').to_i + sum }
#=> 15
使用eval
的解决方案更有趣,但使用inject
的解决方案可以说更容易理解。干杯。
我是编程新手。我想获取一个整数数组,例如 [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
而不是 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
arr = [155, 151, 2, 15]
arr.sum { |n| (n.digits - [5]).reverse.join.to_i }
#=> 15
使用eval
:
eval(arr.join('+').delete('5'))
#=> 15
使用 inject
:
arr.inject(0){|sum, element| element.to_s.delete('5').to_i + sum }
#=> 15
使用eval
的解决方案更有趣,但使用inject
的解决方案可以说更容易理解。干杯。