ruby数组输入

时间:2013-04-04 17:28:35

标签: ruby arrays

我正在尝试使用ruby编写一个小函数,该函数从用户获取数组,然后汇总数组中的数据。我把它写成

    def sum(a)
      total = 0
      a.collect { |a| a.to_i + total }
    end

然后该函数运行一个rspec,它通过最初输入一个空白数组来测试它。这会导致以下错误

    sum computes the sum of an empty array
    Failure/Error: sum([]).should == 0
    expected: 0
        got: [] (using ==)

所以它告诉我,当它输入空白数组时,它应该得到0而不是它获得数组。我尝试输入一个写成

的if语句
    def sum(a)
      total = 0
      a.collect { |a| a.to_i + total }
      if total = [] then { total = 0 end }
    end

但它给我一个错误说

    syntax error, unexpected '}', expecting => (SyntaxError)

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您不应该使用map / collectreduce / inject是适当的方法

def sum(a)
  a.reduce(:+)
  # or full form
  # a.reduce {|memo, el| memo + el }

  # or, if your elements can be strings
  # a.map(&:to_i).reduce(:+)
end

答案 1 :(得分:0)

见这里:How to sum array of numbers in Ruby?

在这里:http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-inject

def sum(a)
    array.inject(0) {|sum,x| sum + x.to_i }
end

答案 2 :(得分:0)

gets.split.map(&:to_i).inject(:+)