ruby如果散列键包含文本,则返回散列键

时间:2013-12-17 20:00:08

标签: ruby hash

我有这样的哈希:

hash = {2013 => 'one', 2014 => 'two'}

和变量number

number = 13

我需要搜索所有哈希密钥,如果密钥中包含number,我需要返回该密钥。现在我有这个:

if hash.keys.any? {|k| k.include? number}
  #do some work
end

虽然有效,但我确实需要在k确实包含k的情况下返回number,而不仅仅是检查它。我怎样才能以上述“if”格式轻松写出来。

3 个答案:

答案 0 :(得分:3)

使用find

if result = hash.keys.find {|k| k.include? number}
  #do some work
end

答案 1 :(得分:1)

if kv = hash.find { |k,v| k.to_s[number.to_s] }
  # do some work
end

例如,如果number = 13,则块中的kv == [ 2013, "one" ]。如果找不到,则kvnil,并跳过该块。

答案 2 :(得分:1)

您希望将两个值都转换为字符串,然后检查一个字符串是否包含另一个字符串。像这样:

hash.keys.select {|key| key.to_s.include? number.to_s }