Ruby的新手,我只是遗漏了一些基本的东西。哈希中的键是否被认为是一个数组?
答案 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中的数组。