Prefer sort_by to sort when providing a block
Prefer the sort_by
method over the sort
method whenever you provide a block to define the comparison.
Common form:
line_adds.sort { |x, y| x.elements["ItemRef/ListID"].text <=>
y.elements["ItemRef/ListID"].text }
Preferred form:
line_adds.sort_by { |x| x.elements["ItemRef/ListID"].text }
For small collections both techniques have similar performance profiles. When the sort key is something simple like an integer there is no performance benefit from sort_by
.
The performance difference is especially noticeable if the sort key is expensive to compute and/or you have a large collection to sort.
The algorithm that yields the performance benefit is known as the Schwartzian Transform.
Written on December 11, 2016 by alistairmckinnell