从数组中制作哈希 - 这是如何工作的?

问题描述:

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 

看公共类方法[]类哈希。 (说,over here.)它清楚地表明,将创建一个新的哈希(实例)并与给定的对象填充。自然,它们成对出现。splat操作符实质上扩展数组作为参数时。