簡體   English   中英

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來代替每個,這樣就避免了將塊內變換的每個元素推入新的初始化數組,例如:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM