2014-01-30 1 views
0

nil이없는 배열의 최소값을 알아야합니다.ArgumentError : NilClass와 1의 비교 실패 min_by

[{val: 1},{val: nil}].min_by { |v| v[:val] || 0 } 

을하지만이 {:duration=>nil}

나는 단지 전무 값없이 최소 값을 얻으려면

을 반환 - :

[{val: 1},{val: nil}].min_by { |v| v[:val] } 

ArgumentError: comparison of NilClass with 1 failed min_by

내 옆에 접근했다 도착 예상 1

답변

4
[{val: 1},{val: nil}].delete_if { |v| v[:val].nil? }.min_by { |v| v[:val] } 

delete_if을 사용하면 값이 nil 인 경우 블록과 일치하는 배열 요소를 제외 할 수 있습니다.

4

당신은 할 수도 reject 전무

[{val: 1},{val: nil}].reject { |v| v[:val].nil? }.min_by { |v| v[:val] } 

새로운 배열을 반환 거부 값, delete_if 만 일치하는 블록에서 값을 삭제합니다 - 모두가 가능하다. 그러나 나는 delete_if가 당신의 경우에 더 많은 영향을 줄 것이라고 생각합니다.

+0

예 'nil'값이없는 배열 만 필요합니다. 그러나 또한 좋은 접근법. – Mindbreaker