Home > Software design >  How does Ruby's Combined Comparison Operator work?
How does Ruby's Combined Comparison Operator work?

Time:10-06

First question on stackoverflow :)

I'm going through the Ruby course on Codecademy and I'm stuck on something.

fruits = ["orange", "apple", "banana", "pear", "grapes"]

fruits.sort! {|first, second| second <=> first} 

print fruits

I don't know how to phrase this question. On Codecademy the assignment was to set up the array to be displayed in reverse on the console. After some research, I was able to figure it out. I understand how it works and the order to put it in the code not why. I'm aware that "<=>" compares two objects, but how do the items within the array become objects when we don't declare them as such?

Secondly, what is the purpose of writing this code in this way when we could do fruits.sort.reverse?

CodePudding user response:

First question: At various points in its operation the sort method has to compare pairs of objects to see what their relative ordering should be. It does the comparison by applying the block you pass to sort, i.e., {|first, second| second <=> first}. Not sure what you mean by "how do the items within the array become objects when we don't declare them as such?". All data in ruby is an object, so there's no declaration or conversion needed given that all variables are object references.

Second question: Yes, you could do fruits.sort.reverse, but that would require additional work after the sort to do the reverse operation. Also, reverse can't handle more complex sorting tasks, such as sorting people by multiple criteria such as gender & last name, or hair color, height, and weight. Writing your own comparator can handle quite complex orderings.

CodePudding user response:

String literals can be used to create string objects in Ruby, there is no need to use the String class to create the object. The following two are equivalent:

"Hello, world!"
String.new("Hello, world!")

More information can be found here.


Secondly, what is the purpose of writing this code in this way when we could do fruits.sort.reverse?

Please contact Codecademy about this, but I suspect it's for learning more about how <=> works.

  • Related