Apa itu <=>
operator Ruby (pesawat ruang angkasa)? Apakah operator diimplementasikan oleh bahasa lain?
ruby
operators
comparison-operators
spaceship-operator
Justin Ethier
sumber
sumber
[1,3,2] <=> [2,2,2]
?[1,nil] <=> [1,3]
Anda dapatkannil
karena konsistensi algoritme, membandingkan setiap elemen pada gilirannya hingga<=>
hasilnya TIDAK0
. Tidak ada cara bagi Ruby untuk menyatakan kurang dari atau lebih besar dari dalam contoh ini, karena perbandingan tidak dapat dibuat. Thenil
harus diperlakukan sebagai "tidak sama". Jika Anda mengetahui sesuatu tentang data, dan mis. Ingin diperlakukannil
sebagai0
, Ruby membuatnya mudah.Jawaban:
Perl kemungkinan merupakan bahasa pertama yang menggunakannya. Groovy adalah bahasa lain yang mendukungnya. Pada dasarnya bukannya kembali
1
(true
) atau0
(false
) tergantung pada apakah argumen yang sama atau tidak sama, operator pesawat ruang angkasa akan kembali1
,0
atau−1
tergantung pada nilai argumen kiri relatif terhadap argumen yang tepat.Ini berguna untuk mengurutkan array.
sumber
Metode pesawat ruang angkasa berguna ketika Anda mendefinisikannya di kelas Anda sendiri dan termasuk modul Sebanding . Kelas Anda kemudian mendapatkan
>, < , >=, <=, ==, and between?
metode secara gratis.sumber
Ini adalah operator perbandingan umum. Mengembalikan nilai -1, 0, atau +1 tergantung pada apakah receivernya kurang dari, sama dengan, atau lebih besar dari argumennya.
sumber
Saya akan jelaskan dengan contoh sederhana
[1,3,2] <=> [2,2,2]
Ruby akan mulai membandingkan setiap elemen dari kedua array dari sisi kiri.
1
untuk array kiri lebih kecil2
dari array kanan. Oleh karena itu array kiri lebih kecil dari array kanan. Output akan menjadi-1
.[2,3,2] <=> [2,2,2]
Seperti di atas pertama akan membandingkan elemen pertama yang sama maka akan membandingkan elemen kedua, dalam hal ini elemen kedua array kiri lebih besar maka outputnya adalah
1
.sumber
Karena operator ini mengurangi perbandingan ke ekspresi integer, ia menyediakan cara tujuan paling umum untuk mengurutkan naik atau turun berdasarkan beberapa kolom / atribut.
Misalnya, jika saya memiliki array objek, saya dapat melakukan hal-hal seperti ini:
Pola dasar ini dapat digeneralisasi untuk mengurutkan berdasarkan sejumlah kolom, dalam permutasi naik / turun pada masing-masing kolom.
sumber
Menurut RFC yang memperkenalkan operator , $ a
<=>
$ bContoh:
LEBIH:
sumber