2012-09-02 137 views
3

我想寫一個方法,它需要輸入一個整數數組並返回它們的產品。例如:如何使用數組#每個元素相乘數組?

product([1,2,3]) # returns 6 

我需要使用Array#each而不是注入方法來做到這一點。這是我想出了,但它似乎是不正確的:

def product(array) 
    final = 0.0 
    array.each do |i| 
    final *= i 
    end 
    return final 
end 

而且,我怎麼能修改此方法返回陣列中的所有奇數整數的乘積,使得

product([1,2,3])  # returns 3, because 2 is even 

product([0,-1,-10]) # returns -1, because 0 and -10 are even 
+4

我想你的意思初始化'final' 1 – Ramon

+1

只是爲了重新線,其減少/注入:'array.reduce(&:*)' – Ramon

+1

爲什麼你必須使用每個? –

回答

6

正如雷蒙說,剛初始化決賽中以1.0:

def product(array) 
    final = 1.0 
    array.each { |i| final *= i } 
    final 
end 

然而,在慣用的紅寶石:

[1, 2, 3].inject(:*) 
+0

謝謝!我還有一個問題,如果我想讓方法返回數組中所有奇數整數的乘積,我該如何做到這一點?例如,product([1,2,3])會返回3,因爲2是偶數。 – user1404456

+0

您可以先用find_all過濾數組,然後使用inject來將所有元素相乘:[1,2,3] .find_all {| i | i%2 == 1} .inject(:*) –

+0

我會如何使用每個?這是我到目前爲止:array.each do | i | if i%2 == 1 then final * = i – user1404456

0
def product(array) 
    final = 1.0 
    array.each do |i| 
    final *= i 
    end 
    final 
end 
0
arr = [1,2,3,4,5] 

首先

for i in arr 
a=i 
    for j in arr 
    a *=j 
    end 
p a 
end 

for i in arr 
    p product = arr.inject(i , :*) 
end 
1
def find_product(x) 
    return x.inject(&:*) 
end 

x = [5, 6, 7, 10, 15, 18, 32] 

find_product(x) 
相關問題