From: "zverok (Victor Shepelev)" Date: 2022-01-13T16:34:42+00:00 Subject: [ruby-core:107102] [Ruby master Bug#18486] Enumerable#group_by ordering appears to have changed and doesn't match docs. Issue #18486 has been updated by zverok (Victor Shepelev). I think it is docs bug. `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. I think it is a natural reason of keys being in the order they are inserted: the first value for grouping is 1 (`1 % 3`), so that's why it appears first in the result. With the preservation of Hash keys order introduced at 1.9, I think that's when the behavior changed :))) In Ruby 1.8.6, imitation of `group_by` with `inject` does the initially documented order: ```ruby (1..6).to_a.inject({}) { |r, i| (r[i % 3] ||= []) << i; r } # => {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]} ``` ---------------------------------------- Bug #18486: Enumerable#group_by ordering appears to have changed and doesn't match docs. https://bugs.ruby-lang.org/issues/18486#change-95948 * 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: