2016-07-21 3 views
-1

두 개의 10 진수 값 또는 특정 형식의 정수 사이에서 더 큰 값을 찾으려고합니다. 예를 들어, 여러 개의 점이있는 특정 문자열 중에서 가장 큰 문자

  • 2.1.52.2을 비교합니다. 2.2은 더 큰 것입니다.
  • 2.3.32.3.456을 비교하십시오. 2.3.456이 더 큽니다.

처리 할 수 ​​없습니다. 이 문제를 해결할 수있는 방법을 제안하십시오.

당신은 각 버전에서 배열을 만들 수 있습니다
+0

은 다음과 같은 문자열입니까? 왜냐하면'2.3.456'은'Numeric'의 유효한 인스턴스가 아니기 때문입니다. –

+0

예, 지금은 문자열 형식입니다. – Rubyist

+0

'2.2'를 제외하고는 십진수 나 정수가 아닙니다. – sawa

답변

2

:

def to_version(s) 
    s.split('.').map(&:to_i) 
end 

to_version('2.3.3') 
# => [2, 3, 3] 

지금 당신이 (배열은 비교할 수) 두 결과를 비교할 수 있습니다

['2.2', '2.1.5'].max_by { |x| to_version(x) } 
# => "2.2" 
['2.3.3', '2.3.456'].max_by { |x| to_version(x) } 
# => "2.3.456" 
['2.13.3', '2.3.456'].max_by { |x| to_version(x) } 
# => "2.13.3" 
+0

잘 작동합니다. 감사합니다. – Rubyist

+0

루비스트에 대한 설명은 [Array # <=>] (http://ruby-doc.org/core-2.3.0/Array.html#method-i-3C-3D-3E)을 참조하십시오. Uri가 의미하는 바는 "배열은 비슷합니다"입니다. –

1
젬 버전 번호와 같은 문자열에 대해 알고

:

['2.13.3', '2.3.456'].map{|v| Gem::Version.new(v)}.sort 
# =>[#<Gem::Version "2.3.456">, #<Gem::Version "2.13.3">] 
+0

네, 또는'sort_by' –

관련 문제