Skip to content
This repository was archived by the owner on Apr 15, 2026. It is now read-only.

Commit 98ebfec

Browse files
authored
Merge pull request #39 from kyanagi/speedup-flatten
Speed up `Set#flatten`
2 parents 706f475 + cadb686 commit 98ebfec

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

lib/set.rb

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -353,16 +353,19 @@ def to_set(klass = Set, *args, &block)
353353
klass.new(self, *args, &block)
354354
end
355355

356-
def flatten_merge(set, seen = Set.new) # :nodoc:
356+
def flatten_merge(set, seen = {}) # :nodoc:
357357
set.each { |e|
358358
if e.is_a?(Set)
359-
if seen.include?(e_id = e.object_id)
359+
case seen[e_id = e.object_id]
360+
when true
360361
raise ArgumentError, "tried to flatten recursive Set"
362+
when false
363+
next
361364
end
362365

363-
seen.add(e_id)
366+
seen[e_id] = true
364367
flatten_merge(e, seen)
365-
seen.delete(e_id)
368+
seen[e_id] = false
366369
else
367370
add(e)
368371
end

0 commit comments

Comments
 (0)