Standard Library Essentials
Set Basics
Ruby's Set class stores unique values and makes membership checks direct.
set
A `Set` keeps one copy of each value, so adding a duplicate does not increase the size.
Set Basics
set_basics.rb
Replay: real traced execution (multi-file project)
require "set"
candidate = "trace"
topics = Set.new(["ruby", "docs"])
added = topics.add?(candidate)
contains_candidate = topics.include?(candidate)
sorted_topics = topics.to_a.sort
topic_list = sorted_topics.join("/")
puts "candidate=#{candidate}"
puts "added=#{!added.nil?}"
puts "contains=#{contains_candidate}"
puts "topics=#{topic_list}"
require "set"
candidate = "ruby"
topics = Set.new(["ruby", "docs"])
added = topics.add?(candidate)
contains_candidate = topics.include?(candidate)
sorted_topics = topics.to_a.sort
topic_list = sorted_topics.join("/")
puts "candidate=#{candidate}"
puts "added=#{!added.nil?}"
puts "contains=#{contains_candidate}"
puts "topics=#{topic_list}"
require "set"
candidate = "debug"
topics = Set.new(["ruby", "docs"])
added = topics.add?(candidate)
contains_candidate = topics.include?(candidate)
sorted_topics = topics.to_a.sort
topic_list = sorted_topics.join("/")
puts "candidate=#{candidate}"
puts "added=#{!added.nil?}"
puts "contains=#{contains_candidate}"
puts "topics=#{topic_list}"
candidate ← trace, topics ← #<Set: {"ruby", "docs"}>, added ← (empty)
1require "set"23candidate→ trace = "trace" #@candidate="ruby", "debug"4topics→ #<Set: {"ruby", "docs"}> = Set.new(["ruby", "docs"])56added→ (empty) = topics.add?(candidate)#<Set: {"ruby", "docs", "trace"}>7contains_candidate→ true = topics.include?(candidate)true8sorted_topics→ ["docs", "ruby", "trace"] = topics.to_a.sort["docs", "ruby", "trace"]9topic_list→ docs/ruby/trace = sorted_topics.join("/")docs/ruby/trace1011puts "candidate=#{candidatetrace}"12puts "added=#{!added.nil?true}"13puts "contains=#{contains_candidatetrue}"14puts "topics=#{topic_listdocs/ruby/trace}"outputcandidate=trace added=false contains=true topics=docs/ruby/trace
candidate ← ruby, topics ← #<Set: {"ruby", "docs"}>, added ← (empty)
1require "set"23candidate→ ruby = "ruby"4topics→ #<Set: {"ruby", "docs"}> = Set.new(["ruby", "docs"])56added→ (empty) = topics.add?(candidate)(empty)7contains_candidate→ true = topics.include?(candidate)true8sorted_topics→ ["docs", "ruby"] = topics.to_a.sort["docs", "ruby"]9topic_list→ docs/ruby = sorted_topics.join("/")docs/ruby1011puts "candidate=#{candidateruby}"12puts "added=#{!added.nil?true}"13puts "contains=#{contains_candidatetrue}"14puts "topics=#{topic_listdocs/ruby}"outputcandidate=ruby added=false contains=true topics=docs/ruby
candidate ← debug, topics ← #<Set: {"ruby", "docs"}>, added ← (empty)
1require "set"23candidate→ debug = "debug"4topics→ #<Set: {"ruby", "docs"}> = Set.new(["ruby", "docs"])56added→ (empty) = topics.add?(candidate)#<Set: {"ruby", "docs", "debug"}>7contains_candidate→ true = topics.include?(candidate)true8sorted_topics→ ["debug", "docs", "ruby"] = topics.to_a.sort["debug", "docs", "ruby"]9topic_list→ debug/docs/ruby = sorted_topics.join("/")debug/docs/ruby1011puts "candidate=#{candidatedebug}"12puts "added=#{!added.nil?true}"13puts "contains=#{contains_candidatetrue}"14puts "topics=#{topic_listdebug/docs/ruby}"outputcandidate=debug added=false contains=true topics=debug/docs/ruby