Set. In Ruby, sets have only unique elements. Like a hash, a set provides fast lookups. But it stores no values alongside the keys—it only stores keys.
Logical methods. Sets provide many logical methods for adding, removing and testing elements. We can use operations like subset for easy analysis.
First example. This example creates a new Set with the Set.new syntax. The argument to new() is an array of 2 elements—each element is added to the set.
Detail We call the add() method twice. One string, "socrates," is added but already exists. The duplicate is not stored.
Detail We call the size() method on the set, which returns 3. The set has 3 elements because the duplicate was not retained.
Detail We finally invoke the "include" method. This returns true because the argument exists within the set.
Info When we call "include," a hashed lookup occurs. In large sets, this is much faster than a linear search through the elements.
require "set"
# Create new Set.
s = Set.new(["plato", "socrates"])
# Add two more elements.
s.add("cebes")
s.add("socrates")
# Get size.
puts s.size()
# See if Set includes this element.
puts s.include?("socrates")3
true
Merge, each. Next, this program uses the merge() method and the each() iterator. With merge(), we pass in a collection and the set adds all of its elements.
Detail With each, we iterate over the elements in the set. This uses the same syntax forms available on the hash and array in Ruby.
Tip This is the simplest way to loop over a set. In this example, we use the identifier "n."
require "set"
# Create set.
s = Set.new(["x", "y"])
# Merge in these two elements.
s.merge(["y", "z"])
# Iterate the set.
s.each do |n|
# Display the element.
puts n
endx
y
z
Subset, operators. One common operation with a set is the "subset" test. We can determine if all elements from one set are contained within another. We can use <= or the "subset?" method.
require "set"
# Contains three elements.
set1 = Set.new [10, 20, 30]
# Is a superset of set1.
set2 = Set.new [10, 20, 30, 40, 50]
# This is true.
if set1 <= set2
puts true
end
# This is not evaluated to true.
if set2 <= set1
puts false
end
# This is true.# ... Subset is the same as the <= operator.
if set1.subset?(set2)
puts true
endtrue
true
A summary. A set stores just keys, not values. In this way, it is like a hash with no values. In places where no values are required, this leads to clearer code.
Set benefits. Performance with sets is good—hashed lookups make searches faster. But the greater benefit with a set is its logical methods, which simplify code.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Oct 13, 2021 (image).