위의 예에서 결과가 사실 인 이유를 설명 할 수 있습니까? '1 :'과 '2 :'를 비교하면 결과가 예상됩니다.숫자 문자열 비교가 예기치 않은 결과를 나타내는 이유는 무엇입니까?
'1:' < '2:'
# => true
위의 예에서 결과가 사실 인 이유를 설명 할 수 있습니까? '1 :'과 '2 :'를 비교하면 결과가 예상됩니다.숫자 문자열 비교가 예기치 않은 결과를 나타내는 이유는 무엇입니까?
'1:' < '2:'
# => true
문자열을 문자 단위로 비교되어있다 :
위한 ASCII 코드보다 작은, 48이므로.
당신이 2:
대 1:
비교
2
대
1
로 시작하고, 비교는 예상 결과가 중지됩니다. 당신이
1:
10:
대, 비교가
1
대
1
로 시작하고, 넥타이이기 때문에, 비교가
0
대
:
입니다 다음 비교로 이동하고, 비교 결과와 함께이 정지 비교
그 당신은 놀라운 것을 발견했습니다 (문자열 내의 정수가 비교 될 것이라는 기대에 따라).
예상 한 비교를 수행하려면 to_i
을 사용하여 두 피연산자를 정수로 형변환하십시오.
두 문자열 각각의 첫 번째 문자는 같습니다. Dave가 주석에서 말했듯이 첫 번째 문자 인 '0'의 두 번째 문자는 ':'보다 작으므로 첫 번째 문자열은 두 번째 문자보다 작습니다.
0
위한 ASCII 코드 58
ASCII로 문자 비교입니다.
'10:' < '1:'
는 (49 < 49) || (48 < 58) || (58 < ?)
#=> true
'1:' < '2:'
입니다 마우스 오른쪽 부울 확인하려면 왼쪽 (49 < 50) || (58 < 58)
#=> true
를 사용하고 발견 진정한 휴식을 확인이다.
참고 : 다양한 예시 패턴에 대한 나의 관찰 일뿐입니다.
'0' <':'등 –
http://en.wikipedia.org/wiki/Lexicographical_order – roippi