루비에서 최소/최대값을 어떻게 찾나요?

min(5,10)또는Math.max(4,7)`와 같이 간단하고 간단한 작업을 수행하고 싶습니다. 루비에도 이런 효과를 내는 함수가 있나요?

해결책

할 수 있는 일

[5, 10].min

또는

[4, 7].max

Enumerable 모듈]1에서 가져온 메서드이므로 Enumerable이 포함된 모든 메서드를 사용할 수 있습니다.

v2.4에서는 #each 호출을 건너뛰기 때문에 Enumerable의 메서드보다 훨씬 빠른 자체 Array#minArray#max가 도입되었습니다.

편집

nicholasklick은 또 다른 옵션인 Enumerable#minmax를 언급했지만 이번에는 [최소, 최대]의 배열을 반환합니다.

[4, 5, 7, 10].minmax
=> [4, 10]
해설 (13)

다음을 사용할 수 있습니다.

[5,10].min 

또는

[4,7].max

배열에 대한 메서드입니다.

해설 (2)

그 결과를 처리할 수 있는 모든 발령합니다 쓰레기요 질러스 시도 두 개 이상의 인수. I& # 39, & # 39 잘 수행할 수 있는지에 대해 호기심을 갖고, d 에 비해 ol 볼 수 있습니다.

def max (a,b)
  a>b ? a : b
end

그러고보니 내 공식 답변을 원하는거요 데이터베이스에구성원을 질문이예요 )

해설 (3)

제공된 답변 외에도 다른 프로그래밍 언어에서와 같이 변수 숫자나 인수를 호출할 수 있는 최대 메서드로 Enumerable#max를 변환하려면 다음과 같이 작성할 수 있습니다:

def max(*values)
 values.max
end

Output:

max(7, 1234, 9, -78, 156)
=> 1234

이는 제공된 모든 인수를 포함하는 배열 객체를 생성하거나 인수가 제공되지 않은 경우 빈 배열 객체를 생성하기 위해 splat 연산자의 속성을 악용합니다. 후자의 경우 빈 배열 객체에 대해 Enumerable#max를 호출하면 nil이 반환되므로 이 메서드는 nil을 반환합니다.

Math 모듈에서 이 메서드를 정의하려면 이렇게 하면 됩니다:

module Math
 def self.max(*values)
  values.max
 end
end

Enumerable.max는 적어도 삼항 연산자(?:)에 비해 두 배 느립니다에 유의하세요. 더 간단하고 빠른 방법은 Dave Morse의 답변을 참조하세요.

해설 (1)

찾아야 할 경우 최대 / min) 의 '또는' # ',' # max_by min_by 해시라고 사용할 수 있습니다.

people = {'joe' => 21, 'bill' => 35, 'sally' => 24}

people.min_by { |name, age| age } #=> ["joe", 21]
people.max_by { |name, age| age } #=> ["bill", 35]
해설 (0)