Bug #13698
closedSort Methods Differ
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.