Sort

array.sortarray.sort { |x, y| x <=> y } 와 동일

x, y는 sorting algorithm에서 선택하는 array의 두 element

<=> 연산자의 뜻은

return -1 if x < y
return 0 if x = y
return 1 if x > y


nil값을 가지는 경우의 sorting

array = [1, 2, nil, 3, 5]
array.sort { |a, b| a && b ? a<=>b : a ? -1 : 1 }
--> [1, 2, 3, 5, nil]

a && b ? a <=> b

a, b 둘다 존재하면 정상적으로 a<=>b 연산으로 sorting


a ? -1 : 1

a가 nil인 경우, 1을 반환 (즉 a > b 인 것으로 처리)

b가 nil인 경우, -1을 반환 (즉 a < b 인 것으로 처리)

–> nil이 제일 큰 수로 취급해서 ascending order로 sorting한 경우 가장 마지막에 위치하게 됨.



StackOverflow: how-does-arraysort-work-when-a-block-is-passed

StackOverflow: sorting-a-ruby-array-of-objects-by-an-attribute-that-could-be-nil