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 a require '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])

Solution 2

For me the main difference is that Sets 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.

Share:
26,088

Related videos on Youtube

Mellon
Author by

Mellon

Software Engineer

Updated on April 27, 2020

Comments

  • Mellon
    Mellon about 4 years

    What is the difference between Set and Array in Ruby except for the fact that sets keep unique elements while arrays can keep duplicate elements?

    • Bhushan Lodha
      Bhushan Lodha over 12 years
      this link may give you more fruitful insight on this topic.
  • Clint Pachl
    Clint Pachl about 10 years
    Set.new.class.superclass #=> Object
  • Clint Pachl
    Clint Pachl about 10 years
    $ ri Set.eql? states: "For objects of class Object, eql? is synonymous with ==."
  • user1678401
    user1678401 about 10 years
    Most 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
    Sampson Crowley about 4 years
    There is a literal notation now (as of ruby 2.4): Set[1,2,3]