我有一个整数数组。

例如:

array = [123,321,12389]

有没有什么好办法可以得到它们的总和?

我知道

sum = 0
array.each { |a| sum+=a }

会工作。


#1楼

array.reduce(0, :+)

虽然等同于array.inject(0, :+) ,但随着MapReduce编程模型的兴起,术语“ 减少”正在进入一种更为普遍的说法。

注入缩小折叠累积压缩都是一类折叠函数的同义词。 我发现在您的代码库中保持一致性是最重要的,但是由于各个社区倾向于优先使用一个单词而不是另一个单词,因此了解替代方法还是很有用的。

为了强调map-reduce语言,这里提供了一个版本,该版本对该数组中的最终内容有些宽容。

array.map(&:to_i).reduce(0, :+)

一些其他相关阅读:

  • http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-inject
  • http://en.wikipedia.org/wiki/MapReduce
  • http://en.wikipedia.org/wiki/Fold_(高级功能)

#2楼

尝试这个:

array.inject(0){|sum,x| sum + x }

请参阅Ruby的可枚举文档

(注意: 0是需要基础案例,使得0将一个空数组,而不是在被返回nil


#3楼

或者尝试使用Ruby 1.9:

array.inject(0, :+)

注意:需要0基本情况,否则将在空数组上返回nil

> [].inject(:+)
nil
> [].inject(0, :+)
0

#4楼

或者(仅作比较),如果您安装了Rails(实际上只是ActiveSupport):

require 'activesupport'
array.sum

#5楼

对于Ruby> = 2.4.0,您可以使用Enumerables中的sum

[1, 2, 3, 4].sum

mokeypatch基类很危险。 如果您喜欢危险并使用旧版本的Ruby,可以将#sum添加到Array类中:

class Arraydef suminject(0) { |sum, x| sum + x }end
end

#6楼

仅出于多样性的考虑,如果您的数组不是数字数组,而是具有数字(例如数量)属性的对象数组,也可以执行此操作:

array.inject(0){|sum,x| sum + x.amount}

#7楼

您也可以轻松地做到这一点

def sum(numbers)return 0 if numbers.length < 1result = 0numbers.each { |num| result += num }result
end

#8楼

您可以像这样使用.map.sum

array.map { |e| e }.sum

#9楼

您可以简单地使用:

    example = [1,2,3]example.inject(:+)

#10楼

Ruby array.sum / Rails- array.sum[1, 2, 3].sum # => 6

Ruby Pre 2.4- array.inject(:+)array.inject(:+) array.reduce(:+)

*注: #sum方法是一个新的除了2.4 enumerable ,所以你现在可以使用array.sum纯红宝石,而不仅仅是Rails的。


#11楼

如果您觉得打高尔夫球,可以

eval([123,321,12389]*?+)

这将创建一个字符串“ 123 + 321 + 12389”,然后使用函数eval进行求和。 这为了打高尔夫球 ,请勿在正确的代码中使用它。


#12楼

Ruby 2.4.0已发布,它具有Enumerable#sum方法。 所以你可以做

array.sum

来自文档的示例:

{ 1 => 10, 2 => 20 }.sum {|k, v| k * v }  #=> 50
(1..10).sum                               #=> 55
(1..10).sum {|v| v * 2 }                  #=> 110

#13楼

Ruby 2.4.0的新功能

您可以使用适当命名的方法Enumerable#sum 。 与inject(:+)相比,它具有很多优点,但最后还要阅读一些重要说明。

例子

范围

(1..100).sum
#=> 5050

数组

[1, 2, 4, 9, 2, 3].sum
#=> 21[1.9, 6.3, 20.3, 49.2].sum
#=> 77.7

重要的提示

此方法不等同于#inject(:+) 。 例如

%w(a b c).inject(:+)
#=> "abc"
%w(a b c).sum
#=> TypeError: String can't be coerced into Integer

也,

(1..1000000000).sum
#=> 500000000500000000 (execution time: less than 1s)
(1..1000000000).inject(:+)
#=> 500000000500000000 (execution time: upwards of a minute)

有关为何sum类的更多信息,请参见此答案 。


#14楼

array.reduce(:+)

也适用于范围 ...因此,

(1..10).reduce(:+) returns 55

#15楼

或者您可以尝试以下方法:

def sum arr0 if arr.emptyarr.inject :+
end

#16楼

还允许[1,2].sum{|x| x * 2 } == 6 [1,2].sum{|x| x * 2 } == 6

# http://madeofcode.com/posts/74-ruby-core-extension-array-sum
class Arraydef sum(method = nil, &block)if block_given?raise ArgumentError, "You cannot pass a block and a method!" if methodinject(0) { |sum, i| sum + yield(i) }elsif methodinject(0) { |sum, i| sum + i.send(method) }elseinject(0) { |sum, i| sum + i }endend
end

#17楼

这是最短的方法。 试试吧。

array.inject :+


#18楼

方法1:

    [1] pry(main)> [1,2,3,4].sum=> 10[2] pry(main)> [].sum=> 0[3] pry(main)> [1,2,3,5,nil].sumTypeError: nil can't be coerced into Integer

方法2:

   [24] pry(main)> [].inject(:+)=> nil[25] pry(main)> [].inject(0, :+)=> 0[4] pry(main)> [1,2,3,4,5].inject(0, :+)=> 15[5] pry(main)> [1,2,3,4,nil].inject(0, :+)TypeError: nil can't be coerced into Integerfrom (pry):5:in `+'

方法3:

   [6] pry(main)> [1,2,3].reduce(:+)=> 6[9] pry(main)> [].reduce(:+)=> nil[7] pry(main)> [1,2,nil].reduce(:+)TypeError: nil can't be coerced into Integerfrom (pry):7:in `+'

方法4:当Array包含nil和空值时,默认情况下,如果您使用上述任何函数reduce,sum,inject都会通过

TypeError:无法将nil强制转换为Integer

你可以克服这个

   [16] pry(main)> sum = 0 => 0[17] pry(main)> [1,2,3,4,nil, ''].each{|a| sum+= a.to_i }=> [1, 2, 3, 4, nil, ""][18] pry(main)> sum=> 10

方法6: 评估

计算字符串中的Ruby表达式。

  [26] pry(main)> a = [1,3,4,5]=> [1, 3, 4, 5][27] pry(main)> eval a.join '+'=> 13[30] pry(main)> a = [1,3,4,5, nil]=> [1, 3, 4, 5, nil][31] pry(main)> eval a.join '+'SyntaxError: (eval):1: syntax error, unexpected end-of-input1+3+4+5+

#19楼

对于nil值的数组,我们可以进行压缩,然后注入和

a = [1,2,3,4,5,12,23.45,nil,23,nil]
puts a.compact.inject(:+)

#20楼

这足够[1,2,3].inject('+')


#21楼

number = [1..100]number. each do |n|final_number = n.sumputs "The sum is #{final_number}"
end

*这对我作为新开发人员来说非常有效。 您可以通过更改[]中的值来调整数字范围


#22楼

我们可以对数组求和的3种方法

1) array.inject(0){|sum,x| sum + x } array.inject(0){|sum,x| sum + x }

2) array.inject('+')

3) array.join('+')


#23楼

红宝石1.8.7的方式如下:

array.inject(0, &:+)

如何在Ruby中求和数字数组?相关推荐

  1. 如何在Ruby中使用数组方法

    介绍 (Introduction) Arrays let you represent lists of data in your programs. Once you have data in an ...

  2. 如何在JavaScript中获取字符串数组的字符串?

    本文翻译自:How do you get a string to a character array in JavaScript? How do you get a string to a chara ...

  3. 如何在Ruby中编写switch语句

    如何在Ruby中编写switch语句? #1楼 案例...当 在Chuck的答案中添加更多示例: 带参数: case a when 1puts "Single value" whe ...

  4. 如何在 bash 中使用索引数组

    数组是一种数据结构,表示具有相同数据类型的对象集合.bash shell中支持两种类型的数组:关联数组或索引数组.在本文中,将演示如何在 bash 中使用索引数组.以下使用 shell 示例来说明索引 ...

  5. 如何在C中为一个数组分配空间?

    如何在C中为一个数组分配空间 最简单的方法是: char array[5]//分配给数组array一个5个字节的空间. 但是我们要知道在C中数组其实就是一个名字,其实质含义就是指针,比如char a ...

  6. 07-提取字符串中的数字数组

    #include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<assert.h>sta ...

  7. 如何在 JavaScript 中检查数字是正数还是负数

    如何在 JavaScript 中检查数字是正数还是负数 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的.包括语音识别.机器翻译等从基础到实战都有,很详细,分享给大家. ...

  8. Microsoft Excel 教程:如何在 Excel 中使用数字格式?

    欢迎观看 Microsoft Excel 教程,小编带大家学习 Microsoft Excel 的使用技巧,了解如何在 Excel 中使用数字格式. 在 Excel 中,可对单元格中的数字进行格式设置 ...

  9. html中写自增数字,WPS word中数字怎么自增 如何在word中设置数字的千位分隔符

    选中某行,列或者某一部分,选择菜单栏的"行和列"->"填充"选项,选择序列选项. 在弹出的窗口中设置你需要的选项. WPS文字怎样自动增加数字 如何在WP ...

最新文章

  1. python 累积正态分布函数_为什么机器学习都围绕正态分布进行讨论?
  2. 【二叉树】【144. 二叉树的前序遍历】【中等】
  3. 内存的静态分配和动态分配的区别【转】
  4. 【Boost】boost库asio详解5——resolver与endpoint使用说明
  5. 记一次kubect init初始化端口占用问题
  6. Android资源文件在配置文件中的使用
  7. git强行覆盖master分支
  8. ASP.NET MVC- UrlHelper的用法
  9. java 实现饼状图_怎么用JAVA 开发的圆饼图
  10. 关于librdkafka编译错误问题解决
  11. 新版标准日本语初级_第四十八课
  12. IT行业什么岗位最吃香
  13. Jenkins报错'Gradle build daemon disappeared unexpectedly'的问题解决
  14. RPA之家直播公开课
  15. 命令行视频下载工具-dl
  16. CSS雪碧图制作emoji表情包
  17. background-image无法显示图片
  18. 常用电子面单接口API demo下载(菜鸟快递鸟)
  19. c# 桌面录屏,生成视频方案总结
  20. python使用codecs.open 读写

热门文章

  1. 算法--------------有效的数独
  2. 第四周项目三-随机数函数应用于游戏(小学生算术能力测试系统)
  3. 浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法
  4. linux添加磁盘后进入grub,从硬盘安装 Linux 和从 GRUB 命令行启动操作系统
  5. python linux系统管理与自动化运维_《Python Linux系统管理与自动化运维》赖明星著【摘要 书评 在线阅读】-苏宁易购图书...
  6. 人工智能实践:TensorFlow笔记学习(二)—— Python语法串讲
  7. 【Git】如何撤销改动
  8. swift_037(Swift之Swift和OC混编)
  9. autoconfig oracle,ORACLE EBS 执行autoconfig time out
  10. delphi 只允许运行一个实例的三种方法《转》