Ruby使用find遍历数组并返回匹配值

时间:2014-04-20 23:27:06

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我正在尝试使用find循环查找数组以查找并返回特定的id。 这是我的结构:

{
  "employees": [
    {
      "emp_id": "1",
      "tutorials": [
        {
          "id": "test1"
        },
        {
          "id": "test2"
        },
        {
          "id": "test3"
        },
        {
          "id": "test4"
        },
        {
          "id": "test5"
        }
      ]
    }
  ]
 }

所以基本上我试图看看上面的结构是否包含'test3'的教程id并返回它。(即在这种情况下返回'test3')

我可以使用map的组合得到所需的结果并找到如下:

 my_tutorial = employees.map { |employee|
  employee.tutorials.find { |tutorial|
    tutorial.id == 'test3'
  }
}.first

my_tutorial

但我想知道是否有更好的方法使用find。我尝试了以下但它返回ruby对象而不是id。

 employees.find { |employee|
  employee.tutorials.find { |tutorial|
    tutorial.id == 'test3'

  }
}

2 个答案:

答案 0 :(得分:0)

这是我使用find做的工作。不确定它是否更好:

my_id = employees.find { |employee|
  employee.tutorials.find { |tutorial|
    tutorial.id == 'test3'

  }
}
my_id.tutorials.first.id

答案 1 :(得分:0)

如果您只需要获取第一条记录,请执行以下操作:

employees[0].tutorials.detect {|r| r.id == 'test3' }