Câu trả lời của @OscarRyz đã giải đáp rất nhiều cho tôi về câu hỏi về cách thức hoạt động của phân loại, đặc biệt
{ |x, y| y <=> x }
Dựa trên hiểu biết của tôi, tôi sẽ cung cấp ở đây trạng thái của mảng sẽ như thế nào sau mỗi lần so sánh cho các kết quả khối ở trên.
Lưu ý: Có tham chiếu về việc in các giá trị của các tham số khối e1, e2 từ
ruby-forum
1.9.3dev :001 > a = %w(d e a w f k)
1.9.3dev :003 > a.sort { |e1, e2| p [e2, e1]; e2 <=> e1 }
["w", "d"]
["k", "w"]
["k", "d"]
["k", "e"]
["k", "f"]
["k", "a"]
["f", "a"]
["d", "f"]
["d", "a"]
["d", "e"]
["e", "f"]
=> ["w", "k", "f", "e", "d", "a"]
Trạng thái mảng được đoán trong thời gian chạy sau mỗi lần so sánh:
[e2, e1] Comparsion Result Array State
["w", "d"] 1 ["w", "e", "a", "d", "f", "k"]
["k", "w"] -1 ["w", "e", "a", "d", "f", "k"]
["k", "d"] 1 ["w", "e", "a", "k", "f", "d"]
["k", "e"] 1 ["w", "k", "a", "e", "f", "d"]
["k", "f"] 1 ["w", "k", "a", "e", "f", "d"]
["k", "a"] 1 ["w", "k", "a", "e", "f", "d"]
["f", "a"] 1 ["w", "k", "f", "e", "a", "d"]
["d", "f"] -1 ["w", "k", "f", "e", "a", "d"]
["d", "a"] 1 ["w", "k", "f", "e", "d", "a"]
["d", "e"] -1 ["w", "k", "f", "e", "d", "a"]
["e", "f"] -1 ["w", "k", "f", "e", "d", "a"] (Result)
Cảm ơn,
Jignesh
<=>
là một phương thức được xác định trongComparable
và trộn vớiString
.Fixnum
vàBignum
cũng xác định<=>
. Bạn có thể triển khai<=>
trong bất kỳ lớp nào mà việc sắp xếp hoặc so sánh là cần thiết.