为什么hash.keys.class返回数组?

时间:2011-06-13 23:34:16

标签: ruby

Ruby的新手,我只是遗漏了一些基本的东西。哈希中的键是否被认为是一个数组?

3 个答案:

答案 0 :(得分:6)

是的,Hash#keys将哈希的键作为 new 数组返回,即哈希和Hash#keys返回的数组完全相互独立:

a = {}
b = a.keys
c = a.keys

b << :foo

a   # still {}
b   # [:foo]
c   # still []

a[:bar] = :baz

a   # {:bar => :baz}
b   # still [:foo]
c   # still []

答案 1 :(得分:1)

来自hash.keys的文档:

  
    

返回一个填充了此哈希中的键的新数组。另见Hash#values。

  

因此该类是Array,因为返回值是一个数组。

关于你的问题“Hash中的键是否被认为是一个数组?”,它们中的“类似”,Ruby中的哈希实现为struct(st_table),其中包含指向每个条目的指针列表( st_table_entry),st_table_entry包含键及其值,所以我猜key方法的作用就是遍历该列表,取出每个键。

你可以阅读Ilya Grigorik的这篇文章,他在Ruby中解释了更好的哈希http://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash/

答案 2 :(得分:-2)

你认为这有什么矛盾之处吗?请记住,散列不是Ruby中的数组。