sortOn sorts the specified
NESeq by
comparing the results of a key function applied to each element.
sortOn f is equivalent to
sortBy
(compare `on` f), but has the performance advantage
of only evaluating
f once for each element in the input list.
This is called the decorate-sort-undecorate paradigm, or Schwartzian
transform.
An example of using
sortOn might be to sort a
NESeq of
strings according to their length:
sortOn length (fromList ("alligator" :| ["monkey", "zebra"])) == fromList ("zebra" :| ["monkey", "alligator"])
If, instead,
sortBy had been used,
length would be
evaluated on every comparison, giving <math> evaluations, rather
than <math>.
If
f is very cheap (for example a record selector, or
fst),
sortBy (compare `on` f)
will be faster than
sortOn f.