为数组的每个元素添加1

时间:2014-02-24 01:04:53

标签: ruby

创建一个名为“Sum_plus_one”的方法,该方法接受包含整数的数组参数。在为每个数组添加一个整数之后,Themethod应该返回数组中整数的总和。

例如:    sum_plus_one([1,2,3])

结果应为:9

我的代码看起来像这样

def sum_plus_one(*nums)

     for num in nums
     num + 1
     end
     total = 0
     for num in nums
     total += num
     end
 return total
end

5 个答案:

答案 0 :(得分:5)

为什么不预先做一点数学运算,看看对数组元素加一的求和与求和元素然后加上数组长度相同?例如:

(5+1) + (6+1) + (11+1) = 5 + 6 + 11 + (1 + 1 + 1)
                       = 5 + 6 + 11 + 3

这给你一些美好而简单的东西:

array.inject(:+) + array.length

答案 1 :(得分:1)

使用Enumerable#inject

[105] pry(main)> arr
=> [1, 2, 3]
[106] pry(main)> arr.inject(0) { |var, i| var + i + 1 }
=> 9

所以方法看起来像

def sum_plus_one(*nums)
  nums.inject(0) { |var, num| var + num + 1 }
end

答案 2 :(得分:1)

功能样式版

[1, 2, 3].reduce(0) {|acc, n| acc + n + 1}

答案 3 :(得分:1)

map / reduce在这里很方便:

def sum_plus_one(nums)
  nums.map(&:succ).reduce(:+)
end

编辑:

这是使代码有效的一种方法:

def sum_plus_one(nums)
  nums.map! do |num|
    num + 1
  end

  total = 0
  for num in nums
    total += num
  end

  return total
end

答案 4 :(得分:0)

您的问题是您需要将num + 1值分配给您在第一个循环中枚举的数组的相应元素。

可能是这样的:

for i in (0...nums.count)
    nums[i] += 1
end

之后你的程序应该工作

(是的,您可以使用花哨的库或构造而不是上面的循环)

请注意,您可以取消顶部循环,只需在第二个循环中将num + 1添加到total