2012-09-02 7 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

난 당신이 그냥 다시 1 – Ramon

+1

에'final'를 초기화하는 것을 의미 생각 코드, reduce/inject를 사용하는 한 줄짜리 :'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])는 2가 짝수이기 때문에 3을 반환합니다. – user1404456

+0

먼저 find_all을 사용하여 배열을 필터링 한 다음 inject를 사용하여 모든 요소를 ​​곱할 수 있습니다. [1, 2, 3] .find_all {| i | i % 2 == 1} .inject (: *) –

+0

각각 어떻게 사용합니까? 이것은 내가 지금까지 가지고있는 것이다. array.each do | i | i % 2 == 1이면 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) 
관련 문제