Ruby Set ExamplesUse the set collection. Add elements to sets and use include, merge and subset.
dot net perls

Set. These have only unique elements. Like a hash, a set provides fast lookups. But it stores no values (no pairs). 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.

This example creates a new Set with the Set.new syntax. The argument to new() is an array of two elements. We then call the add() method twice.

Duplicates One string, "socrates", is added but already exists. The duplicate is not stored.

Size We call the size() method on the set, which returns 3. The set has three elements because the duplicate was not retained.

Include We finally invoke the "include" method. This returns true because the argument exists within the set.

Ruby program that uses Set
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

Hashing. When we call "include?" on the set, a hashed lookup occurs. In large sets, this is much faster than a linear search through the elements.

Tip In a hashed lookup, a special code is computed that indicates a position in memory.

Tip 2 This performance characteristic is also found in the hash type. A benchmark is available.


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.

Each 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.

Ruby program that uses Set, merge, each
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 end
x 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.

Ruby program that uses subset, operators
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 end
true 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, like subset, which simplify code.

© 2007-2021 sam allen. send bug reports to info@dotnetperls.com.