我正在尝试获取数组中奇数之和。我正在尝试编写一种方法odd_sums
,该方法接受一个数字数组,并在其中返回奇数之和。
odd_sum([5,4,6,13,1]) # => 19
odd_sum([10,2,11,3]) # => 14
odd_sum([8,18]) # => 0
我在数组中得到了奇数:
def odd_sum(a.)
new_arr = []
i = 0
while i < a.length
if a.[i] % 2!=0
new_arr << a.[i]
end
i += 1
end
return new_arr
end
但是我无法获得奇数之和。请帮助我。
答案 0 :(得分:11)
我建议:
a = [5, 4, 6, 13, 1]
a.select(&:odd?).sum
#=> 19
答案 1 :(得分:6)
无需多次通过数组或创建临时数组。
def odd_sum(arr)
arr.sum { |n| n.odd? ? n : 0 }
end
odd_sum([5,4,6,13,1]) #=> 19
odd_sum([10,2,11,3]) #=> 14
odd_sum([8,18]) #=> 0
答案 2 :(得分:3)
更正语法,并使用一个简单的整数存储和(您不需要存储数组)。
[string] $currentDir = $PSScriptRoot
[string] $newDir = $currentDir + '\moveFolder'
[string] $destination = $newDir + '\build\'
New-Item -ItemType Directory -Force -Path $destination
Get-ChildItem -Path $currentDir -Directory -Exclude moveFolder | Move-Item -Destination $destination
查看其他答案以了解如何使用更多类似Ruby的代码。
答案 3 :(得分:2)
编写此代码
a=[5,4,6,13,1]
puts a.select{|x|x.odd?}.sum
答案 4 :(得分:0)
您可以将.select
与Enumerable class和Array class的方法.sum
一起使用
def odd_sum(arr)
arr.select{|i| i % 2 == 0}.sum
end
#,但是由于您要处理整数数组,因此可以使用.odd?
与i % 2 == 0
做同样的事情,如@Rajagopalan答案所示
def odd_sum(arr)
arr.select{|i| i.odd? }.sum
#or the shorthand version: arr.select(&:odd?).sum
end
可以在其中将块传递给.sum
的替代语法,这里我们从和中减去数字(如果是偶数)。这有点不太可读,但是是有效的语法,实际上对于您的用例而言效率较低。查看基准。
def odd_sum(arr)
arr.sum {|i| i.odd? ? i : 0}
end
arr = Array.new(1_00000){rand(1..200)}
puts Benchmark.measure{arr.select(&:odd?).sum}
0.000000 0.000000 0.000000 ( 0.005207)
puts Benchmark.measure{arr.sum{|n|n.odd? ? n : 0}}
0.000000 0.000000 0.000000 ( 0.006952)