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 arequire 'set'
.
回答2:
For me the main difference is that Set
s 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.