우주선 연산자란?
영어로 Three-way comparison
일본어로 宇宙船演算子
라고 한다.
한국어로 뭐라 불러야 할지 모르겠지만 일본어를 그대로 번역하면 우주선 연산자
<=>
이 모양이 우주선이랑 비슷하다고 해서 지어진 이름 같다. &
외톨이 연산자(ぼっち演算子)도
그렇고 일본인의 작명센스는 스고이..
하는 일
-1 0 1
----|----|----|----
< = >
위와 같이 기호에 따라 반환하는데
좌측이 오른쪽보다 작으면 음수(-1) 좌측이 오른쪽보다 크다면 정수( 1) 좌측과 오른쪽이 같다면 제로( 0) 를 반환해준다.
또한 비교가 불가능한 경우 nil을 반환하므로 예외에 대한 처리도 신경쓸 필요가 없음
ex)
10 <=> 20 # -1
20 <=> 10 # 1
20 <=> 20 # 0
20 <=> '20' # nil
사용예
sort커맨드와 같이 많이 사용
ary2 = ["9", "7", "10", "11", "8"]
p ary2.sort{|a, b| a.to_i <=> b.to_i } #=> ["7", "8", "9", "10", "11"]
string형태의 값이어도 수치로서 계산이 가능해 편리하다.
sort만 사용할 경우 문자열로 비교하므로 아래와 같이 정렬된다.
ary2 = ["9", "7", "10", "11", "8"]
p ary2.sort #=> ["10", "11", "7", "8", "9"]
sort_by
sort_by를 써도 같은 결과가 나온다.
ary2 = ["9", "7", "10", "11", "8"]
p ary2.sort_by{|x| x.to_i } #=> ["7", "8", "9", "10", "11"]