From 6ec014ced1dcc4eeb62d375a3f3edf11b8fabc7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Sun, 14 Jan 2024 18:52:42 +0100 Subject: [PATCH 1/2] Optimize hash lookup in `Enumerable#group_by` --- src/enumerable.cr | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/enumerable.cr b/src/enumerable.cr index 6b24c833f44f..20dde421628d 100644 --- a/src/enumerable.cr +++ b/src/enumerable.cr @@ -636,11 +636,7 @@ module Enumerable(T) h = Hash(U, Array(T)).new each do |e| v = yield e - if h.has_key?(v) - h[v].push(e) - else - h[v] = [e] - end + h.put_if_absent(v, Array(T).new) << e end h end From 918872418e92bae12abf75241a9c12c26db5ac40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Sun, 28 Jan 2024 13:06:03 +0100 Subject: [PATCH 2/2] Update src/enumerable.cr Co-authored-by: Quinton Miller --- src/enumerable.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enumerable.cr b/src/enumerable.cr index 20dde421628d..9a1aad3debd0 100644 --- a/src/enumerable.cr +++ b/src/enumerable.cr @@ -636,7 +636,7 @@ module Enumerable(T) h = Hash(U, Array(T)).new each do |e| v = yield e - h.put_if_absent(v, Array(T).new) << e + h.put_if_absent(v) { Array(T).new } << e end h end