簡體   English   中英

循環中的紅寶石數組總和

[英]Sum of ruby arrays in a loop

我想找到從1到100的數組的總和。每個數字都轉換為包含自己的數字的數組,例如97將為[9,7]。這是我嘗試過的

 (1..100).to_a.each do |i|
      i.to_s.split("").map(&:to_i).inject(0) { |sum, number| sum + number }
 end

但是數組的總和顯示不正確! 例如;我們首先創建一個數字數組,然后返回sum

[1]=1
[5]=5
[1, 0]=1
[1, 1]=2
[1, 2]=3
[1, 3]=4
[1, 4]=5

因此,將返回單個數組的總和。

each將迭代該數組,但不會使用該塊的結果創建一個新的數組。 如果您想要結果在最后,則需要使用map

result = (1..100).to_a.map do |i|
  i.to_s.split("").map(&:to_i).inject(0) { |sum, number| sum + number }
end

result
#=> [1, 2, 3, 4, ...]

為了求和一個數組,你也可以簡單地寫

array.inject(:+)
# instead of
array.inject(0) { |sum, number| sum + number }

另外, to_a不是必需的,您可以直接調用each和/或map一個范圍。 所以簡化的代碼是

result = (1..100).map do |i|
  i.to_s.split("").map(&:to_i).inject(:+)
end

result
#=> [1, 2, 3, 4, ...]

對於您的代碼,您只需要將each方法更改為map

 (1..100).to_a.map do |i|
      i.to_s.split("").map(&:to_i).inject(0) { |sum, number| sum + number }
 end

更簡單的方法:

result = (1..100).to_a.map{ |e| e.to_s.split('').map(&:to_i).reduce(:+) }

=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 1]

如果要獲得結果的總和,請執行以下操作:

result.reduce(:+)

如果我正確理解了您的問題,則需要這些新數組的總和 ,對嗎? 這應該可以解決您的問題:

(1..100).map { |i| i.to_s.split("").map(&:to_i).inject(:+) }.inject(:+)

digitssum是較新的方法,將其簡化為

(1..100).sum{|i| i.digits.sum}

現代更新版本的Ruby的另一種選擇:

(1..100).flat_map(&:digits).sum

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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