답변

3

오신 것을 환영합니다 루비 : 문제를 해결하기 위해 많은 방법이있다!

아주 간단한 해결책은 다음과 같습니다 전무 이후

a.max_by { |v| v.to_f * 2 } 

이이 음의 값을 처리하지 않습니다 0으로 떠 강제 변환,하지만 전무는 것과 같이 지금 NilClass라는 클래스의 단일 인스턴스이기 때문에 우리가 그것을 열 수 있습니다 루비에서 모든 클래스는 그것이 littly 수학 배워 봅시다 : 지금 우리가

class NilClass 
    # overloading * operator 
    def *(y) 
    # returning negative infinity: Ruby 1.8.7 
    -1.0/0.0 
    # returning negative infinity: Ruby 1.9.2 
    # -Float::INFINITY 
    end 
end 

a.max_by { |v| v * 2 } 

4를 반환합니다.

8

max_by으로 전화하기 전에 Array.compact을 사용하여 nils를 제거 할 수 있습니다. 이 분명히 compact보다 더 복잡 귀하의 예를 들어

a.max_by { |v| v.nil? ? -Float::INFINITY : v } 
#=> 4 

,하지만 당신은 배열을 정렬하고 nil 값을 유지하려는 경우 그것은 편리한 트릭 :

a.compact.max_by { |v| v * 2 } 
+0

작동하지만 OP 질문 (Enumerable 클래스를 확장하는 방법)에 대해서는 답변이 없습니다. –

2

는 여기에 또 다른 하나입니다. 아니면 끝까지 제로처럼 이상한 방식으로 정렬 할 경우 :

[0,4,5,6,1,9].sort_by { |v| v.zero? ? Float::INFINITY : v } 
#=> [1, 4, 5, 6, 9, 0] 
관련 문제