集合 vs 数组,它们有什么区别?

27
除了Set保持唯一元素而Array可以保留重复元素外,在Ruby中SetArray有什么区别?

1
这个链接可能会给你更多关于这个主题的有益见解:https://dev59.com/VFTTa4cB1Zd3GeqPuKA7。 - Bhushan Lodha
3个回答

41

它们非常不同。

数组

  • 数组是一个有序的对象列表。
  • 可以通过引用列表中的整数位置(从零开始)访问数组值:a [3] 引用数组中的第四个对象。
  • 数组中的值没有限制,允许有重复的值。
  • 数组具有对象文字表示法:[1,'apple',String,1,:banana](这将创建并初始化新的数组)。
  • 数组内置于核心Ruby库中。

集合

  • 集合是唯一对象的无序池。
  • 由于它是无序的,因此没有整数索引可用于访问集合的特定元素。
  • 唯一性限制意味着您不能在集合中有多个值的副本。
  • Set 不是核心的一部分,而是标准库的一部分,因此需要 require 'set'
  • 在 Ruby 2.4 之前,没有集合的对象文字表示法,必须通过 Set.new 创建。
    • 对于 Ruby >= 2.4.0,您可以使用 Set[](例如: Set [1,2,3])。

2
现在有一个字面符号(从Ruby 2.4开始):Set [1,2,3] - Sampson Crowley

24

对我来说,主要区别在于Set是以哈希表实现的,因此您可以对元素进行O(1)成员测试。


4

另一个重要的区别在于include?方法的实现:数组基于==方法比较成员,而集合使用eql?方法。


Set.new.class.superclass #=> Object集合.新建.类.超类 #=> 对象 - Clint Pachl
"$ ri Set.eql?" 表示:"对于 Object 类的对象,eql? 与 == 是同义词。" - Clint Pachl
1
大多数集合和数组不包含Object类的对象。它们包含Object子类的对象,其中有许多子类eql?==不是同义词。 - Confusion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接