Qu'est-ce que l' <=>
opérateur Ruby (vaisseau spatial)? L'opérateur est-il implémenté dans d'autres langues?
ruby
operators
comparison-operators
spaceship-operator
Justin Ethier
la source
la source
[1,3,2] <=> [2,2,2]
?[1,nil] <=> [1,3]
vous obtenez un ennil
raison de la cohérence de l'algorithme, comparez tour à tour chaque élément jusqu'à ce que le<=>
résultat ne soit PAS0
. Il n'y a aucun moyen pour Ruby de déclarer moins ou plus que dans cet exemple, car une comparaison ne peut tout simplement pas être faite. Lenil
doit être traité comme "non égal". Si vous savez quelque chose sur les données et que vous souhaitez par exemple les traiternil
comme telles0
, Ruby vous facilite la tâche.Réponses:
Perl était probablement la première langue à l'utiliser. Groovy est une autre langue qui le prend en charge. Fondamentalement , au lieu de retourner
1
(true
) ou0
(false
) selon que les arguments sont égaux ou inégaux, l'opérateur de vaisseau spatial retourne1
,0
ou en−1
fonction de la valeur de l'argument gauche par rapport à l'argument droit.Il est utile pour trier un tableau.
la source
La méthode du vaisseau spatial est utile lorsque vous la définissez dans votre propre classe et incluez le module Comparable . Votre classe obtient ensuite les
>, < , >=, <=, ==, and between?
méthodes gratuitement.la source
C'est un opérateur de comparaison général. Il renvoie soit -1, 0 ou +1 selon que son récepteur est inférieur, égal ou supérieur à son argument.
la source
Je vais vous expliquer avec un exemple simple
[1,3,2] <=> [2,2,2]
Ruby commencera à comparer chaque élément des deux tableaux du côté gauche.
1
pour le tableau de gauche est plus petit que pour le tableau2
de droite. Par conséquent, le tableau de gauche est plus petit que le tableau de droite. La sortie sera-1
.[2,3,2] <=> [2,2,2]
Comme ci-dessus, il comparera d'abord le premier élément qui est égal, puis il comparera le deuxième élément, dans ce cas, le deuxième élément du tableau de gauche est plus grand, d'où la sortie
1
.la source
Étant donné que cet opérateur réduit les comparaisons à une expression entière, il fournit le moyen le plus général de trier par ordre croissant ou décroissant en fonction de plusieurs colonnes / attributs.
Par exemple, si j'ai un tableau d'objets, je peux faire des choses comme ceci:
Ce modèle de base peut être généralisé pour trier par n'importe quel nombre de colonnes, dans n'importe quelle permutation ascendante / descendante sur chacune.
la source
Selon le RFC qui a présenté l'opérateur , $ a
<=>
$ bExemple:
PLUS:
la source