Ruby 检查数组元素是否存在

Ruby 检查数组元素是否存在,ruby,arrays,Ruby,Arrays,我有一个复杂的嵌套哈希数组。我试图测试特定元素是否为空 以下方法在控制台上返回NoMethodError:.empty?,.nil?,blank? 这是数组(稍微格式化) 例如,我知道一个特定的元素是空的(或者不存在),但是,当使用上述三种方法中的任何一种来测试它时,我得到了一个NoMethodError 示例: 2.1.0 :034 > result["primaries"][0]["entries"][0]["terms"][0]["text"] => "Giving the i

我有一个复杂的嵌套哈希数组。我试图测试特定元素是否为空

以下方法在控制台上返回NoMethodError:.
empty?
.nil?
blank?

这是数组(稍微格式化)

例如,我知道一个特定的元素是空的(或者不存在),但是,当使用上述三种方法中的任何一种来测试它时,我得到了一个NoMethodError

示例:

2.1.0 :034 > result["primaries"][0]["entries"][0]["terms"][0]["text"]
=> "Giving the impression that something bad or unpleasant is going to happen; threatening; inauspicious" 

2.1.0 :035 > result["primaries"][0]["entries"][0]["terms"][0]["text"].empty?
=> false 
现在,我知道下一个元素是空的(不存在),所以我使用:

2.1.0 :036 > result["primaries"][0]["entries"][1]["terms"][0]["text"].empty?
NoMethodError: undefined method `[]' for nil:NilClass
  from (irb):36
  from /home/kyle/.rvm/gems/ruby-2.1.0/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
  from /home/kyle/.rvm/gems/ruby-2.1.0/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
  from /home/kyle/.rvm/gems/ruby-2.1.0/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
  from script/rails:6:in `require'
  from script/rails:6:in `<main>'
2.1.0:036>结果[“原色”][0][“条目”][1][“术语”][0][“文本”],是否为空?
NoMethodError:nil类的未定义方法“[]”
起始(irb):36
from/home/kyle/.rvm/gems/ruby-2.1.0/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in'start'
from/home/kyle/.rvm/gems/ruby-2.1.0/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in'start'
from/home/kyle/.rvm/gems/ruby-2.1.0/gems/railties-3.2.13/lib/rails/commands.rb:41:in`'
来自脚本/rails:6:in'require'
来自脚本/rails:6:in`'

我还看到了检查文本值的
。include?
。in?
方法,但我想检查元素是否存在任何数据

获得命名错误的原因是
result[“primaries”][0][“entries”][1]
为零,数组中只有一个元素
result[“primaries”][0][“entries”]

您可以执行以下操作:

result["primaries"][0]["entries"][0]["terms"][0]["text"] rescue false

也许您可以使用
定义?

arr = [1,2,3]
puts :defined if defined? arr2 # puts nothing because arr2 doesn't exist
puts :defined if defined? arr  # "defined"

你需要这样的东西:

def recursive(arr)
   arr.is_a?(Array) ? arr.map{|x|recursive(x)} : arr
end

你的数组很大,我懒得调试这个输出。

因此,值可以是散列、数组或字符串,而你正在寻找这些值为空的任何位置?为了让我们能够测试我们的响应,如果你能提供一些我们可以加载的内容(上面的数组似乎已损坏),那就太好了。您介意提供数组的yaml转换吗
需要'yaml'
并且
将您的数组放置到\u yaml
。与我们共享输出=)我并不想批评你,但为了你自己的利益,可能是时候重新评估你的数据结构了。我试图使用类似“if[element]rescue false==false”的if语句,但在关闭evaluation@Kyle.Belanger将整个表达式括在括号中:
if(结果[“primaries”][0][“条目”][0][“术语”][0][“文本”]rescue false)
对于正常程序来说,rescue
有点慢吗?也许他可以使用
抛出
/
捕获
def recursive(arr)
   arr.is_a?(Array) ? arr.map{|x|recursive(x)} : arr
end