Co to jest <=>
operator Ruby (statek kosmiczny)? Czy operator jest implementowany w innych językach?
ruby
operators
comparison-operators
spaceship-operator
Justin Ethier
źródło
źródło
[1,3,2] <=> [2,2,2]
?[1,nil] <=> [1,3]
że otrzymujesz wyniknil
ze względu na spójność algorytmu, porównując kolejno każdy element, aż<=>
wynik NIE będzie0
. Ruby nie ma możliwości zadeklarowania wartości mniejszej lub większej niż w tym przykładzie, ponieważ po prostu nie można dokonać porównania.nil
Powinny być traktowane jako „nie równa się”. Jeśli wiesz coś o danych i np. Chcesz traktowaćnil
jako0
, Ruby to ułatwia.Odpowiedzi:
Perl był prawdopodobnie pierwszym językiem, który go używał. Groovy to kolejny język, który go obsługuje. Zasadniczo zamiast powrocie
1
(true
) lub0
(false
), w zależności od tego, czy argumenty są równe lub nierówne, operator statku kosmicznego powróci1
,0
lub−1
w zależności od wartości lewego argumentu w stosunku do prawego argumentu.Jest to przydatne do sortowania tablicy.
źródło
Metoda statku kosmicznego jest przydatna, gdy definiujesz ją we własnej klasie i obejmuje moduł porównywalny . Twoja klasa otrzymuje
>, < , >=, <=, ==, and between?
metody za darmo.źródło
Jest to ogólny operator porównania. Zwraca wartość -1, 0 lub +1 w zależności od tego, czy jego odbiornik jest mniejszy, równy lub większy niż argument.
źródło
Wyjaśnię prostym przykładem
[1,3,2] <=> [2,2,2]
Ruby rozpocznie porównywanie każdego elementu obu tablic od lewej strony.
1
dla lewej tablicy jest mniejszy niż2
prawej tablicy. Dlatego lewa tablica jest mniejsza niż prawa tablica. Wyjście będzie-1
.[2,3,2] <=> [2,2,2]
Jak wyżej, najpierw porównuje pierwszy element, który jest równy, a następnie porównuje drugi element, w tym przypadku drugi element lewej tablicy jest większy, a zatem wynik jest
1
.źródło
Ponieważ ten operator redukuje porównania do wyrażenia liczb całkowitych, zapewnia najbardziej ogólny sposób sortowania rosnąco lub malejąco na podstawie wielu kolumn / atrybutów.
Na przykład, jeśli mam tablicę obiektów, mogę robić takie rzeczy:
Ten podstawowy wzorzec można uogólnić, aby posortować według dowolnej liczby kolumn, w dowolnej kombinacji rosnącej / malejącej na każdej z nich.
źródło
Według RFC, która wprowadziła operatora , $ a
<=>
$ bPrzykład:
WIĘCEJ:
źródło