如何在Ruby中对字符串数组求和

6

我有一个十进制数字字符串的数组,我需要得到数组的总和。我尝试迭代数组并将每个数字更改为浮点数,但是每次都只返回一个整数,而我需要总和是一个小数。应该将字符串更改为什么数据类型,以及获取数组总和的最佳方法将会很有帮助。


“数组十进制数作为字符串”是什么?它是一个数组、数字还是字符串?你需要提高你的英语水平以便让别人理解你。 - sawa
1
看起来您已经尝试过一些东西,但不是100%清楚那是什么。最简单的方法是展示一些代码,包括一个示例输入和您期望的输出内容。 - Neil Slater
当你提出这样的问题时,如果你展示一些输入和你想要的输出样例,以及你已经尝试解决问题的代码,那么会更有帮助。如果没有这些东西,看起来就像是在寻求别人为你编写代码。 - the Tin Man
4个回答

18

你只需要做

array.map(&:to_f).reduce(:+)

说明:

# it give you back all the Float instances from String instances
array.map(&:to_f)
# same as
array.map { |string| string.to_f }
array.map(&:to_f).reduce(:+)
# is a shorthand of 
array.map(&:to_f).reduce { |sum, float| sum + float }

关于#reduce#map的文档。


不错的回答。我认为原帖作者会受益于一些解释。 - joews
1
如果您没有明确指定memo的初始值,则集合的第一个元素将用作memo的初始值。因此,您无需指定初始值0.0 - mu is too short
@muistooshort 发生了一些问题。我不知道为什么 :( 但无论如何,我已经纠正了它。感谢您的评论。 - Arup Rakshit
иЇ·жіЁж„Џ[].map(&:to_f).reduce(:+) #=> nilпјЊиЂЊ[].map(&:to_f).reduce(0.0, :+) => 0.0гЂ‚ - Cary Swoveland

2
  • 首先,我们将数字字符串放入字符串数组中
  • 其次,我们将整个块转换为数字
  • 然后,我们将所有数字相加,如果数组为空,则不返回nil而是0

将字符串转换为总和

str='1,2,3,4'.split(',').map(&:to_i).inject(0,:+) #1+2+3+4=10

Array of numbers into sum

 num=[1,2,3,4].inject(0,:+)#=>10
 p str
 p num

1
a = ["12.4", "48.2"]
a.inject(0) {|s,e| s.to_f + e.to_f } #=> 60.6

inject可以让你在累加过程中积累一个值。有关#inject的文档。


0

我认为你可以使用以下任意一种语句:

array.map(&:to_f).reduce(:+)
array.sum(&:to_f)

.sumactive_support 中被定义,所以它是 rails 的一部分。如果你只想使用 Ruby,那么使用第一个语句。 - mmsilviu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接