从数组中制作哈希 - 这是如何工作的?
问题描述:
fruit = ["apple","red","banana","yellow"]
=> ["apple", "red", "banana", "yellow"]
Hash[*fruit]
=> {"apple"=>"red", "banana"=>"yellow"}
为什么splat会导致数组如此整齐地分析到哈希中?从数组中制作哈希 - 这是如何工作的?
或者更准确地说,哈希如何“知道”“苹果”是关键,“红色”是它的对应值?
难道仅仅是因为他们在水果阵列中的连续位置?
摔跤在这里使用有意义吗?哈希是否可以不直接从arry中直接定义呢?
答
作为documentation状态:
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200}
{ "a" => 100, "b" => 200 } #=> {"a"=>100, "b"=>200}
不能传递数组到根据Hash[]
方法的文档,因此,图示只是一种方法来爆炸的fruit
阵列,并通过它的元素作为正常参数Hash[]
方法。事实上,这是splat操作符的一种非常常见的用法。
很酷的事情是,如果你尝试通过奇数的参数哈希你会得到一个ArgumentError
例外:
fruit = ["apple","red","banana","yellow","orange"]
#=> ["apple", "red", "banana", "yellow", "orange"]
Hash[*fruit] #=> ArgumentError: odd number of arguments for Hash