【问题标题】:Set vs Array , difference集合 vs 数组,区别
【发布时间】:2011-12-01 08:02:13
【问题描述】:

Ruby 中的SetArray 有什么区别,除了集合保留唯一元素而数组保留重复元素之外?

【问题讨论】:

  • this link 可能会让您对这个主题有更深入的了解。

标签: ruby arrays set


【解决方案1】:

它们非常不同。

Array

  • 数组是对象的有序列表。
  • 可以通过引用其在列表中的整数位置(零索引)来访问数组值:a[3] 引用数组中的第 4 个对象。
  • 对可以是什么值没有限制——数组中允许有重复值。
  • 数组有一个对象字面表示法:[1, 'apple', String, 1, :banana](这会创建并初始化一个新数组)。
  • 核心 ruby​​ 库中内置了数组。

Set

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

【讨论】:

  • 现在有一个 字面符号(从 ruby​​ 2.4 开始):Set[1,2,3]
【解决方案2】:

对我来说,主要区别在于Sets 是作为散列实现的,因此您可以对元素进行O(1) 成员资格测试。

【讨论】:

    【解决方案3】:

    另一个重要的区别是include?方法的实现:Array根据==方法的结果比较成员,而Set使用eql?方法。

    【讨论】:

    • Set.new.class.superclass #=> 对象
    • $ ri Set.eql? 声明:“对于 Object 类的对象,eql? 是 == 的同义词。”
    • 大多数集合和数组不包含 Object 类的对象。它们包含 Object 子类的对象,其中有很多 eql?== 不是同义词。
    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2013-01-30
    • 2018-01-26
    相关资源
    最近更新 更多