Set vs Array , difference
26,088
Solution 1
They are very different.
Array
- An array is an ordered list of objects.
- An array value can be accessed by referencing its integer position in the list (zero-indexed):
a[3]
references the 4th object in the array. - There is no restriction on what the values can be—duplicate values are allowed in arrays.
- An array has an object literal notation:
[1, 'apple', String, 1, :banana]
(this creates and initializes a new Array). - Arrays are built in to the core ruby library.
Set
- A set is an unordered pool of unique objects.
- Since it's unordered, there is no integer index you can use to access specific elements of a set.
- The uniqueness restriction means you can't have more than one copy of a value in the set.
-
Set
is not part of the core, but part of the standard library, and thus needs arequire 'set'
. - Before Ruby 2.4, there was no object literal notation for sets, you had to create them via
Set.new
.- For Ruby >= 2.4.0 you can use
Set[]
(e.g.Set[1,2,3]
)
- For Ruby >= 2.4.0 you can use
Solution 2
For me the main difference is that Set
s are implemented as hashes, so you have O(1)
membership tests for elements.
Solution 3
Another important difference is in the implementation of the include?
method: an Array compares members based on the result of the ==
method, while a Set uses the eql?
method.
Related videos on Youtube
Comments
-
Mellon about 4 years
What is the difference between
Set
andArray
in Ruby except for the fact that sets keep unique elements while arrays can keep duplicate elements?-
Bhushan Lodha over 12 yearsthis link may give you more fruitful insight on this topic.
-
-
Clint Pachl about 10 yearsSet.new.class.superclass #=> Object
-
Clint Pachl about 10 years
$ ri Set.eql?
states: "For objects of class Object, eql? is synonymous with ==." -
user1678401 about 10 yearsMost sets and arrays do not contain objects of class Object. They contain objects of a subclass of Object, of which there are many for which
eql?
and==
are not synonymous. -
Sampson Crowley about 4 yearsThere is a literal notation now (as of ruby 2.4): Set[1,2,3]