Skip to content

Instantly share code, notes, and snippets.

@toothrot
Created July 22, 2010 17:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save toothrot/486279 to your computer and use it in GitHub Desktop.
Save toothrot/486279 to your computer and use it in GitHub Desktop.
does_sort_preserve_order
ary = [
{:sort_me => 1, :expected_order => 1},
{:sort_me => 2, :expected_order => 7},
{:sort_me => 2, :expected_order => 8},
{:sort_me => 1, :expected_order => 2},
{:sort_me => 1, :expected_order => 3},
{:sort_me => 1, :expected_order => 4},
{:sort_me => 1, :expected_order => 5},
{:sort_me => 1, :expected_order => 6},
].sort! { |a,b| a[:sort_me] <=> b[:sort_me] }
ary.map { |e| e[:expected_order] }
# [1, 6, 5, 2, 4, 3, 8, 7]
# therefore, it is not order-preserving. This is not surprising, since it is simply quicksort.
ary = [
{:sort_me => 1, :expected_order => 1},
{:sort_me => 2, :expected_order => 7},
{:sort_me => 2, :expected_order => 8},
{:sort_me => 1, :expected_order => 2},
{:sort_me => 1, :expected_order => 3},
{:sort_me => 1, :expected_order => 4},
{:sort_me => 1, :expected_order => 5},
{:sort_me => 1, :expected_order => 6},
].sort_by { |e| e[:sort_me] }
ary.map { |e| e[:expected_order] }
# [1, 6, 5, 2, 4, 3, 8, 7]
# sort_by is also not order-preserving.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment