From: "matsuda (Akira Matsuda)" Date: 2022-01-13T19:12:43+00:00 Subject: [ruby-core:107104] [Ruby master Bug#18486] Enumerable#group_by ordering appears to have changed and doesn't match docs. Issue #18486 has been updated by matsuda (Akira Matsuda). > group_by emerged in Ruby 1.8.7, but my RVM can't install it :( > The earliest I could check was 1.9.3, and it already has order of keys 1, 2, 0. off-topic: all-ruby is your friend :) https://github.com/akr/all-ruby ``` $ docker run -it --rm rubylang/all-ruby ./all-ruby -e 'p (1..6).to_a.inject({}) { |r, i| (r[i % 3] ||= []) << i; r }' ruby-0.49 -e:1: syntax error (snip) ruby-1.6.8 1..6 -e:1: undefined method `inject' for []:Array (NameError) exit 1 ruby-1.8.0 {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]} ... ruby-1.8.7-p374 {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]} ruby-1.9.0-0 {1=>[1, 4], 2=>[2, 5], 0=>[3, 6]} ... ruby-3.1.0 {1=>[1, 4], 2=>[2, 5], 0=>[3, 6]} ``` ---------------------------------------- Bug #18486: Enumerable#group_by ordering appears to have changed and doesn't match docs. https://bugs.ruby-lang.org/issues/18486#change-95950 * Author: masukomi@masukomi.org (kay rhodes) * Status: Closed * Priority: Normal * ruby -v: 3.0.2 * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN ---------------------------------------- The documentation for Enumerable#group_by suggests the following: (1..6).group_by { |i| i%3 } #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]} it actually produces this (same values different order). Tested in 2.6.3 and 3.0.2 (1..6).group_by { |i| i%3 } #=> {1=>[1, 4], 2=>[2, 5], 0=>[3, 6]} as hash table ordering is something people depend on these days I wonder if the reordering of the keys may be more than just a minor documentation bug. I noticed this in 2.6.3. Assuming the docs matched reality when written this implies we've been living with this for a while. I don't know how long before that this actually changed. -- https://bugs.ruby-lang.org/ Unsubscribe: