数组和哈希的区别是什么?

30

在Ruby中,数组和哈希有什么区别?


1
一个好的答案不仅要有技术描述,还应该包括何时使用其中一种而不是另一种的说明。 - Andrew Grimm
4个回答

38

来自Ruby-Doc:

数组是有序的、整数索引的对象集合。数组的索引从0开始,就像C或Java一样。负数索引被认为是相对于数组末尾的位置,也就是说,索引-1表示数组的最后一个元素,-2是数组中倒数第二个元素,依此类推。查看这里以获得更多信息。

哈希表是键值对的集合。它类似于数组,但是索引是通过任意类型的键进行的,而不是整数索引。哈希表按照插入对应键的顺序枚举其值。

当访问哈希表中不存在的键时,哈希表会返回一个默认值。默认情况下,该值为nil。查看这里以获取更多信息。


11

数组: 数组用于存储数据的集合。数组中的每个对象都有一个唯一的键分配给它。我们可以使用这个唯一的键访问数组中的任何对象。数组中的位置从“0”开始。第一个元素位于“0”,第二个元素位于第1个位置等。

示例: 在 - irb 中尝试以下操作。

bikes = Array.new
bikes = %w[Bajaj-Pulsar, Honda-Unicorn, TVS-Apache, Yamaha, Suzuki]

你已经向数组中添加了4个元素。

puts bikes[3]
Yamaha,

在位置5添加一个新元素。

bikes[5] = "Hardly Davidson"

哈希表: 与数组一样,哈希表也用于存储数据。哈希表将一个对象指向另一个对象。可以将一个字符串赋予某个“含义”。每次引用该字符串时,它都会引用其“含义”。

例如:

bikes = Hash.new
bikes = {
'Bajaj' => 'Pulsar 220, Pulsar 200, Pulsar 180 and Pulsar 150',
'Honda' => 'Unicorn, Shine and Splendor',
'TVS' => 'Apache, Star City, and Victor'
}

现在尝试这个:

bikes['Bajaj']
你获得的是 => "Pulsar 220, Pulsar 200, Pulsar 180 和 Pulsar 150"

10

数组是一组有序的东西:a、b、c、d。

哈希是键值对的集合:约翰拥有一辆标致,鲍勃拥有一辆雷诺,亚当拥有一辆福特。


1
这是否意味着 Ruby 数组 = PHP 索引数组,而 Ruby 哈希 = PHP 关联数组? - emurad
听起来是这样。自从90年代以来,我已经成功避免了使用PHP进行任何需要数组的复杂操作。 - Quentin

1
这两个术语现在经常被"哈希"在一起。我认为它是这样的:
一个"哈希"将有键值对:
(top -> tshirt, bottom -> shorts, feet -> shoes)
而一个"数组"通常会有一个索引:
([0]tshirt, [1]shorts, [2]shoes)
但是,不管对错,你也会看到用键值对称为"数组"。
我认为区别主要取决于何时以及如何使用它们。将数组称为哈希或反之亦然不会有太大问题,但你应该知道它们之间的区别。

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