[英]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
來代替每個,這樣就避免了將塊內變換的每個元素推入新的初始化數組,例如:
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
的解決方案可以說更容易理解。 干杯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.