Bắt đầu lập trình ở đây, chỉ muốn hiểu quy trình phía sau phương thức sort
của Ruby khi sử dụng toán tử tàu vũ trụ <=>
. Hy vọng ai đó có thể giúp đỡ.Phương thức sắp xếp của Ruby hoạt động như thế nào với toán tử so sánh kết hợp (spaceship)?
Trong điều sau đây:
array = [1, 2, 3]
array.sort { |a, b| a <=> b }
... Tôi hiểu rằng sort
được so sánh một cặp số tại một thời điểm và sau đó trở -1
nếu a
thuộc trước b
, 0
nếu họ bình đẳng, hoặc 1
nếu a
nên theo dõi b
.
Nhưng trong trường hợp sắp xếp theo thứ tự giảm dần, như vậy:
array.sort { |a, b| b <=> a }
... chính xác những gì đang xảy ra? Hiện sort
vẫn còn so sánh a <=> b
và sau đó lật kết quả? Hoặc là nó giải thích các return
s của -1
, 0
và 1
với hành vi đảo ngược?
Nói cách khác, tại sao không đặt các biến trong khối như sau:
array.sort { |b, a| b <=> a }
... dẫn đến việc mô hình phân loại tương tự như trong ví dụ đầu tiên?
Vì vậy, nó đang sử dụng thứ tự được chỉ định trong biến khối làm tham chiếu? – vertigokidd
@vertigokidd Chà, bạn còn kỳ vọng Ruby biết cái nào được cho là đối số đầu tiên và cái nào thứ hai? Một lần nữa, Ruby không quan tâm đến tên biến của bạn. – Doorknob
@vertigokidd: Có lẽ bạn đang bối rối bởi kinh nghiệm trước đây với các biến '$ a' và' $ b' ma thuật mà Perl sử dụng với ['sort' blocks] (http: //perldoc.perl.org/functions/sort.html). –