如何获取哈希值以返回键值对

时间:2014-01-10 04:28:36

标签: ruby hash

在以下代码中:

如果我想获得:a(“apple”)的值,我会使用“hash [:a]”。如果我想获得“apple”(:a)的密钥,我会使用hash.key(“apple”)。

但是我怎么能返回哈希值对?

hash = {:a => "apple", :b => "banana"}

e.g。检查哈希是否包含:a,如果它确实返回以下

=> {:a => "apple"}

感谢。

4 个答案:

答案 0 :(得分:1)

如果您使用Rails,则可以使用Hash::slice方法:

hash.slice(:a)

答案 1 :(得分:0)

您也可以使用Hash.entries。条目作为每个键+值对的数组数组返回,并且可以使用splat运算符轻松转换为哈希。

hash.entries.each do |entry| 
  p Hash[*entry] if entry.include?(:a) 
end
=> {:a=>"apple"}

根据user2864740的建议,也可以使用Hash#assoc(如果你使用的是ruby> 1.9):

Hash[*(hash.assoc(:a))]

答案 2 :(得分:0)

如果我有哈希:

hash = {:a => "apple", :b => "banana"}

我想以子哈希的形式从中提取一个特定的键/值对,我会这样做:

_key = :a
Hash[_key, hash[_key]] # => {:a=>"apple"}

并有条件地做到:

Hash[_key, hash[_key]] if hash.key?(_key)

但是,我不确定为什么要传递单元素哈希。如果我知道密钥,我可以轻松抓住价值。如果我需要将它们都传递给另一个方法,我会把它作为一个数组来做:

[:a, "apple"]

答案 3 :(得分:0)

尝试:Hash#select

hash = {:a => "apple", :b => "banana"}
hash.select {|k| k == :a}  #=> {:a=>"apple"}