2014-04-23 3 views
1

이 배열을 가지고 있습니다 :단순 배열 정수 합계?

array = ["1", "Hel", "6", "3", "lo" ].

정수의 합계 만 출력하려면 10을 입력하고 싶습니다. 어떻게해야합니까?

답변

5

String#to_i은 예제에서 0을 반환하므로 모든 배열 요소를 매핑하는 데 사용할 수 있습니다.

array.map(&:to_i).reduce(0, :+) 
+0

이 문제를 해결하기 위해 이니셜을 설정할 필요는 없습니다. 이것은 동일한 결과를 생성합니다 :'array.map (& : to_i) .reduce (: +)'. 이는 배열의 첫 번째 항목에 대한 초기 기본값과 to_i가 문자열이나 nil에서 호출 되더라도 둘 다 Ruby 2.1에서 0으로 평가되기 때문입니다. –

+2

@ GaryS.Weaver 강력한 솔루션을 제공합니다 :'[] .reduce (: +) # nil'과'[] .reduce (0, : +) # 0' – Kyle

+0

잡아! 당신 말이 맞아요, 그게 아마도 의도 였을 거에요. –

6

은 수행

array.inject(0) { |sum,n| sum + n.to_i } # => 10 

#to_i0 모든 비 정수 문자열을 변환합니다. 그러나 모든 합계에 영향을 미치지 않는 문제는 없습니다.

+1

지금까지 대부분의 프로세스가 효율적입니다. Benchmarked이며 이것은'array.map (& : to_i) .reduce (0, : +)'보다 빠릅니다. (1.49s vs. 2.05s for me for 1000000 times) –