Set vs Array , difference

2020-02-10 11:53发布

问题:

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?

回答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.
  • There is no object literal notation for sets, you must create them via Set.new.
  • Set is not part of the core, but part of the standard library, and thus needs a require 'set'.


回答2:

For me the main difference is that Sets are implemented as hashes, so you have O(1) membership tests for elements.



回答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.



标签: ruby arrays set