Ruby如何检查hash是否有一个变量的键?

时间:2013-11-28 21:11:49

标签: ruby-on-rails ruby

我有一个Ruby哈希,其属性如下:

{:type=>"article", :id=>"207", :infographic=>nil, :guest_post=>nil, :interview=>nil}

假设我想检查此哈希是否具有与变量“keyVar”相同的键

keyVar = ":type"

如果我hash.has_key?(keyVar),则返回false,但显然确实有密钥。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

有很多方法可以检查

> hash = {:type=>"article",
          :id=>"207",
          :infographic=>nil, 
          :guest_post=>nil, 
          :interview=>nil}

> hash.keys.include?(:type)
> true
> hash.has_key?(:type)
> true
> hash.key?(:type)
> true

等等....阅读documentation

答案 1 :(得分:0)

您的keyVar变量是字符串,而不是符号。更糟糕的是,它是带有前缀冒号的字符串,因此将其转换为符号并不容易。

你想要的是

hash.has_key?(:type)

但你正在做的是:

hash.has_key?(":type")

使用":type".to_sym的Simpy会让你:":type"。你需要这样的东西:

hash.has_key?(keyVar.gsub(":", "").to_sym)

答案 2 :(得分:0)

您正在检查错误的密钥。这样做:

key_var = :type
hash.key?(key_var)

<小时/> 如果你碰巧有错误的钥匙:

key_var = ":type"

然后,将其转换为正确密钥的方法是:

key_var.delete(":").to_sym

所以

hash.has_key?(key_var.delete(":").to_sym)

会奏效。使用gsub作为另一个答案表明没有意义,因为字符串中只有一个:sub更好,但为什么在使用delete时可以使用它?