检查散列是否为零值

时间:2013-07-08 19:25:10

标签: ruby hash null

我试图从Twitter上分析推文,我想要包含的其中一件事就是位置。不幸的是,有些值为零,我不断收到错误

undefined method `[]' for nil:NilClass (NoMethodError)

我想检查一下是否值为零,但我无法正常工作。

如果输入为nil

,则输入将如下所示
tweet = {"metadata"=> {"geo"=>nil}}

如果它有值

tweet = {"metadata"=> {"geo"=>{"coordinates"=>[0,1]}}

这是我尝试过的

if "#{tweet['metadata']['geo']}".nil? == true
  puts("nil")
else
  puts("#{tweet['metadata']['geo']['coordinates']}"
end

我注意到的是,它只是检查geo是否为空,因为它输出" nil"如果我将if语句更改为false。我不确定如何检查

3 个答案:

答案 0 :(得分:3)

我认为问题可能是你在字符串中插入哈希,它将nil转换为空字符串,实际上并不是nil。

尝试:

if tweet['metadata']['geo'].nil?
  puts("nil")
else
  puts("#{tweet['metadata']['geo']['coordinates']}")
end

答案 1 :(得分:2)

在哈希上使用fetch是处理此类问题的更好方法。 下面链接到另一个答案显示这是如何优雅和美丽的处理。 Ruby - Access multidimensional hash and avoid access nil object

答案 2 :(得分:1)

使用present?检查nilblank。请查看以下代码。

if tweet['metadata']['geo'].present?
  puts("nil")
else
  puts("#{tweet['metadata']['geo']['coordinates']}")
end