Spaceship Operator <=>
The spaceship operator compares two objects (from left to right), returning either -1, 0, or 1.
Explanation
a <=> b
return -1 if a < b
return 0 if a == b
return 1 if a > b
4 <=> 7 # -1
7 <=> 7 # 0
7 <=> 4 # 1
Example one
As you know, in ruby (as in any language) we can get a result in different ways, we could use just the sort
method, of course, but I just wanted to put this in another way:
languages = ['ruby', 'go', 'javascript', 'phyton', 'rust', 'elixir']
languages.sort{|first, second| first <=> second } # ["elixir", "go", "javascript", "phyton", "ruby", "rust"]
languages.sort{|first, second| second <=> first } # ["rust", "ruby", "phyton", "javascript", "go", "elixir"]
Example two
Suppose that we have the next array with the numbers 1 to 10
, and we will like to separate them into different groups:
1. One group for the numbers that are less than 5
2. Another group with the number 5
3. The last group with the numbers that are greater than 5
We could get this result by iterating the array and then by putting a couple of if statements in order to group these 3 categories, but with the spaceship operation we could get this result in an easier way:
numbers = Array(1..10)
target = 5
numbers.group_by{ |number| number <=> target } # {-1=>[1, 2, 3, 4], 0=>[5], 1=>[6, 7, 8, 9, 10]}