Ruby的新手,我只是在这里错过了一些基本的东西。 Hash中的密钥是否认为是一个Array?为什么hash.keys.class返回数组?
回答
是,Hash#keys
返回哈希的键作为一个新阵列,即哈希和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 []
从hash.keys的文档:
返回一个新的数组,填充此散列中的键。另请参阅哈希值。
所以这个类是Array,因为返回值是一个数组。
关于您的问题“哈希中的键是否认为是自己的数组?”,它们是“kind”,Ruby中的哈希以struct(st_table)的形式实现,它包含指向其每个条目的指针列表(st_table_entry)中,st_table_entry包含密钥和它的值,所以我猜想keys方法所做的只不过是遍历每个密钥。
您可以阅读这篇文章伊利亚·格里戈里克的,他解释了红宝石http://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash/
你觉得有自相矛盾的地方好多了哈希?请记住,哈希不是Ruby中的数组。
我不确定从你的回复中得到什么。我问了一个非常简单的问题,承认完全无知......不确定你的回答是否符合“答案”,尽管关于哈希不是数组的部分是有帮助的。 – LuxuryMode 2011-06-16 00:27:04
@LuxuryMode:我只是想澄清你的问题。您可以通过执行'{} .keys.class'来判断这些键的确是一个Array。我只是问你是否对这种行为感到惊讶。如果你觉得有些令人惊讶的事情,那么描述你为什么认为这很令人惊讶会帮助我更好地回答你的问题。因为这个,你是否因此而失败了? – 2011-06-16 00:48:53
- 1. 为什么Ruby数组[array.length,count]返回[]?
- 2. array_combine为什么不返回数组?
- 3. 为什么Object.keys(Array.prototype)返回空数组?
- 4. 为什么从sqlite返回值返回一个空的数组
- 5. 为什么数组返回值与数组索引值?
- 6. 为什么此数组返回0作为对象计数?
- 7. 为什么指针数组未能返回为**
- 8. 为什么我的函数输出的数组返回undefined?
- 9. VB.NET为什么我的函数不能返回数组?
- 10. 为什么我的函数没有返回数组?
- 11. 为什么这个函数返回一个空数组?
- 12. 为什么数组数组上的array_diff返回一个空数组?
- 13. 为什么bash在为数组的一部分搜索数组时返回true?
- 14. 为什么count函数返回一行?
- 15. 为什么要命名返回参数?
- 16. 为什么成员函数返回零
- 17. 函数返回undefined。为什么?
- 18. 我的函数返回空。为什么?
- 19. 为什么返回的数据相同?
- 20. 为什么这个函数返回0
- 21. 为什么javascript函数返回NaN值?
- 22. 为什么val()函数返回[object Object]?
- 23. 为什么这个函数返回undefined?
- 24. 为什么函数返回这些值?
- 25. 为什么difftime只返回整数?
- 26. 为什么我的函数返回undefined?
- 27. 为什么不是PDO_MySQL返回整数?
- 28. 为什么class_exists函数返回false?
- 29. 为什么函数不返回值?
- 30. 为什么console.log函数返回undefined?
+1提及它是一个新数组,并且对其进行更改不会影响底层哈希。 – 2011-06-13 23:48:06