Was ist der Rubin? <=>
Betreiber (Raumschiff)? Wird der Operator in einer anderen Sprache implementiert?
ruby
operators
comparison-operators
spaceship-operator
Justin Ethier
quelle
quelle
[1,3,2] <=> [2,2,2]
?[1,nil] <=> [1,3]
Sie sienil
aufgrund der Konsistenz des Algorithmus erhalten, vergleichen Sie jedes Element nacheinander, bis das<=>
Ergebnis NICHT ist0
. Ruby kann in diesem Beispiel nicht kleiner oder größer als deklarieren, da ein Vergleich einfach nicht möglich ist. Dasnil
sollte als "ungleich" behandelt werden. Wenn Sie etwas über die Daten wissen und z. B.nil
als behandeln möchten0
, macht Ruby dies einfach.Antworten:
Perl war wahrscheinlich die erste Sprache, die es verwendete. Groovy ist eine andere Sprache, die es unterstützt. Anstatt
1
(true
) oder0
(false
) zurückzugeben, gibt der Raumschiffoperator grundsätzlich zurück, je nachdem, ob die Argumente gleich oder ungleich1
sind0
, oder−1
abhängig vom Wert des linken Arguments relativ zum rechten Argument.Dies ist nützlich zum Sortieren eines Arrays.
quelle
Die Raumschiffmethode ist nützlich, wenn Sie sie in Ihrer eigenen Klasse definieren und das Modul Vergleichbar einschließen . Ihre Klasse erhält dann die
>, < , >=, <=, ==, and between?
Methoden kostenlos.quelle
Es ist ein allgemeiner Vergleichsoperator. Es gibt entweder -1, 0 oder +1 zurück, je nachdem, ob sein Empfänger kleiner, gleich oder größer als sein Argument ist.
quelle
Ich werde mit einem einfachen Beispiel erklären
[1,3,2] <=> [2,2,2]
Ruby beginnt mit dem Vergleich jedes Elements beider Arrays von der linken Seite.
1
für das linke Array ist kleiner als2
für das rechte Array. Daher ist das linke Array kleiner als das rechte Array. Ausgabe wird sein-1
.[2,3,2] <=> [2,2,2]
Wie oben wird zuerst das erste Element verglichen, das gleich ist, dann wird das zweite Element verglichen. In diesem Fall ist das zweite Element des linken Arrays größer, daher ist die Ausgabe
1
.quelle
Da dieser Operator Vergleiche auf einen ganzzahligen Ausdruck reduziert, bietet er die allgemeinste Möglichkeit, aufsteigend oder absteigend basierend auf mehreren Spalten / Attributen zu sortieren.
Wenn ich beispielsweise eine Reihe von Objekten habe, kann ich Folgendes tun:
Dieses Grundmuster kann verallgemeinert werden, um nach einer beliebigen Anzahl von Spalten in einer beliebigen Permutation von aufsteigend / absteigend zu sortieren.
quelle
Laut dem RFC, der den Operator eingeführt hat , ist $ a
<=>
$ bBeispiel:
MEHR:
quelle