ruby - 在 Ruby 中,为什么 Hash[:a, 1] 和 Hash[[[ :a, 1]]] 给出相同的结果 { :a => 1}, 而 Hash[[ :a, 1]] 给出一个空哈希?

标签 ruby hash

 > Hash[:a,2,:b,4]
 => {:a=>2, :b=>4} 

 > Hash[:a,1]
 => {:a=>1} 

 > Hash[[:a,1]]
 => {} 

 > Hash[[[:a,1]]]
 => {:a=>1}

最佳答案

您可以通过两种方式传递键值对:

  1. 直接作为 Hash::[] 的参数,键和值交替
  2. 作为一个数组对,每个数组由一个包含键和值的数组表示

第一种形式适合 1,第二种形式适合 1,第四种形式适合 2,但第三种形式也不适合(它由一个数组组成,但既不是 :a 也不是1 是一个键值对)。

第二种形式之所以有用,是因为这是您倾向于从 Hash 的 Enumerable 方法中获得的东西——数组中的键值对数组。所以你可以写 Hash[some_hash.map {|k, v| [k, v+1]}] 最终你会得到一个按照你想要的方式转换的哈希。

关于ruby - 在 Ruby 中,为什么 Hash[:a, 1] 和 Hash[[[ :a, 1]]] 给出相同的结果 { :a => 1}, 而 Hash[[ :a, 1]] 给出一个空哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3731870/

相关文章:

ruby-on-rails - ruby rails : Anything but numbers in validates_format_of

c# - WATIN 和 WATIR 之间的区别

ruby - 什么是 Ruby 中的 "Syntax Error, unexpected tCONSTANT"错误?

MySQL select by password() 未返回预期结果

algorithm - 从 mapreduce 中的 n 个元素中选择 k

java - "Equal Arrays"的哈希函数

perl - 取消引用哈希值

ruby - ruby-doc 和 apidock 有什么区别?

ruby-on-rails - 如何将 block 传递给方法调用?

java - 为什么这个带有 Salt 的 MD5 结果在结果字符串的末尾有 "=="?