Vì toán tử này làm giảm sự so sánh với một biểu thức số nguyên, nó cung cấp cách mục đích chung nhất để sắp xếp tăng dần hoặc giảm dần dựa trên nhiều cột / thuộc tính.
Ví dụ, nếu tôi có một mảng các đối tượng, tôi có thể làm những việc như thế này:
# `sort!` modifies array in place, avoids duplicating if it's large...
# Sort by zip code, ascending
my_objects.sort! { |a, b| a.zip <=> b.zip }
# Sort by zip code, descending
my_objects.sort! { |a, b| b.zip <=> a.zip }
# ...same as...
my_objects.sort! { |a, b| -1 * (a.zip <=> b.zip) }
# Sort by last name, then first
my_objects.sort! { |a, b| 2 * (a.last <=> b.last) + (a.first <=> b.first) }
# Sort by zip, then age descending, then last name, then first
# [Notice powers of 2 make it work for > 2 columns.]
my_objects.sort! do |a, b|
8 * (a.zip <=> b.zip) +
-4 * (a.age <=> b.age) +
2 * (a.last <=> b.last) +
(a.first <=> b.first)
end
Mẫu cơ bản này có thể được tổng quát hóa để sắp xếp theo bất kỳ số lượng cột nào, theo bất kỳ hoán vị tăng / giảm dần trên mỗi cột.
[1,3,2] <=> [2,2,2]
?