이 배열을 가지고 있습니다 :단순 배열 정수 합계?
array = ["1", "Hel", "6", "3", "lo" ]
.
정수의 합계 만 출력하려면 10을 입력하고 싶습니다. 어떻게해야합니까?
이 배열을 가지고 있습니다 :단순 배열 정수 합계?
array = ["1", "Hel", "6", "3", "lo" ]
.
정수의 합계 만 출력하려면 10을 입력하고 싶습니다. 어떻게해야합니까?
String#to_i
은 예제에서 0
을 반환하므로 모든 배열 요소를 매핑하는 데 사용할 수 있습니다.
array.map(&:to_i).reduce(0, :+)
은 수행
array.inject(0) { |sum,n| sum + n.to_i } # => 10
#to_i
는 0
모든 비 정수 문자열을 변환합니다. 그러나 모든 합계에 영향을 미치지 않는 문제는 없습니다.
지금까지 대부분의 프로세스가 효율적입니다. Benchmarked이며 이것은'array.map (& : to_i) .reduce (0, : +)'보다 빠릅니다. (1.49s vs. 2.05s for me for 1000000 times) –
이 문제를 해결하기 위해 이니셜을 설정할 필요는 없습니다. 이것은 동일한 결과를 생성합니다 :'array.map (& : to_i) .reduce (: +)'. 이는 배열의 첫 번째 항목에 대한 초기 기본값과 to_i가 문자열이나 nil에서 호출 되더라도 둘 다 Ruby 2.1에서 0으로 평가되기 때문입니다. –
@ GaryS.Weaver 강력한 솔루션을 제공합니다 :'[] .reduce (: +) # nil'과'[] .reduce (0, : +) # 0' – Kyle
잡아! 당신 말이 맞아요, 그게 아마도 의도 였을 거에요. –