Project

General

Profile

Actions

Bug #13698

closed

Sort Methods Differ

Added by sherrysarkar (Sherry Sarkar) almost 8 years ago. Updated almost 8 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.3p222 (2016-11-21 revision 56859)
[ruby-core:81835]

Description

Hello,

Issue:

Two different machines with the same ruby version return different results for the method "sort". One machine runs macOS and the other runs Linux. More specifically, when I run "ruby --version" in the macOS machine, I get "ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16]" and when I run "ruby --version" in the Linux machine, I get "ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]".

Reproducibility:

If you run the following script in the two machines described above, you get different results.

arr  = [{"id"=>"549741245", "changed"=>"2015-06-24T22:02:51Z"},
 {"id"=>"549760170", "changed"=>"2015-06-24T23:15:44Z"}, 
 {"id"=>"549760171", "changed"=>"2015-06-24T23:15:44Z"},
 {"id"=>"549760172", "changed"=>"2015-06-24T23:15:44Z"},
 {"id"=>"551080187", "changed"=>"2015-06-29T21:49:24Z"},
 {"id"=>"551080188", "changed"=>"2015-06-29T21:49:24Z"},
 {"id"=>"551080189", "changed"=>"2015-06-29T21:49:24Z"}]
arr.sort { |a, b| b['changed'] <=> a['changed'] }

Results
The macOS machine returns

[{"id"=>"551080189", "changed"=>"2015-06-29T21:49:24Z"},
 {"id"=>"551080187", "changed"=>"2015-06-29T21:49:24Z"},
 {"id"=>"551080188", "changed"=>"2015-06-29T21:49:24Z"},
 {"id"=>"549760172", "changed"=>"2015-06-24T23:15:44Z"},
 {"id"=>"549760170", "changed"=>"2015-06-24T23:15:44Z"},
 {"id"=>"549760171", "changed"=>"2015-06-24T23:15:44Z"},
 {"id"=>"549741245", "changed"=>"2015-06-24T22:02:51Z"}]

The Linux machine returns

[{"id"=>"551080187", "changed"=>"2015-06-29T21:49:24Z"},
 {"id"=>"551080188", "changed"=>"2015-06-29T21:49:24Z"},
 {"id"=>"551080189", "changed"=>"2015-06-29T21:49:24Z"},
 {"id"=>"549760170", "changed"=>"2015-06-24T23:15:44Z"},
 {"id"=>"549760171", "changed"=>"2015-06-24T23:15:44Z"},
 {"id"=>"549760172", "changed"=>"2015-06-24T23:15:44Z"},
 {"id"=>"549741245", "changed"=>"2015-06-24T22:02:51Z"}]

I would expect for sort (ruby 2.3.3p222) to return the same results given the same input.

Thanks!

Updated by shevegen (Robert A. Heiler) almost 8 years ago

I get the same for the current ruby on linux (ruby 2.4.1p111 (2017-03-22 revision 58053) [i686-linux])

# => [{"id"=>"551080187", "changed"=>"2015-06-29T21:49:24Z"}, {"id"=>"551080188", "changed"=>"2015-06-29T21:49:24Z"}, {"id"=>"551080189", "changed"=>"2015-06-29T21:49:24Z"}, {"id"=>"549760170", "changed"=>"2015-06-24T23:15:44Z"}, {"id"=>"549760171", "changed"=>"2015-06-24T23:15:44Z"}, {"id"=>"549760172", "changed"=>"2015-06-24T23:15:44Z"}, {"id"=>"549741245", "changed"=>"2015-06-24T22:02:51Z"}]

Perhaps someone with ruby on mac can confirm the result by sherrysarkar.

Updated by nobu (Nobuyoshi Nakada) almost 8 years ago

  • Description updated (diff)
  • Status changed from Open to Rejected

Array#sort is not guaranteed as "stable".
You should compare other keys if they matter.

Actions

Also available in: Atom PDF

Like0
Like0Like0