从多维哈希区访问值

Access value from multidimensional Hash rails

提问人:Animesh Arya 提问时间:7/7/2022 更新时间:7/7/2022 访问量:56

问:

我必须访问每个操作员的 ID 和其他重要信息。 给定数据的结构为:

{:items=>
  [{:id=>"868f136b-ec4e-4794-a3a9-a70d4b83ab38",
    :clientId=>"e92ca89f-8524-451a-9346-666d6ff39329",
    :name=>"allergy_type_display",
    :description=>nil,
    :mnemonic=>"allergy_type_display",
    :columnType=>"dropdown",
    :entityId=>"d96804c4-c815-4d65-891f-b5e5c418587e",
    :createdAt=>"2019-11-27T05:01:34.000Z",
    :updatedAt=>"2019-11-27T05:01:34.000Z",
    :display=>true,
    :fallbackId=>nil,
    :conceptDisplay=>false,
    :businessName=>nil,
    :operators=>
     [{:id=>"15e8c619-7b5b-4612-b2e9-7a17112eceb9",
       :mnemonic=>"gte",
       :description=>"Greater than Equals to",
       :createdAt=>"2019-07-01T13:10:15.000Z",
       :updatedAt=>"2019-07-01T13:10:15.000Z",
       :clientId=>nil},
      {:id=>"38888bef-5442-4c72-b88e-44f4fd3e5614",
       :mnemonic=>"eq",
       :description=>"Equals To",
       :createdAt=>"2019-06-26T09:30:15.000Z",
       :updatedAt=>"2019-07-06T04:14:59.000Z",
       :clientId=>nil},
      {:id=>"4fd6ce17-10d3-42a3-8e4e-24773360db5d",
       :mnemonic=>"ne",
       :description=>"Not Equals To",
       :createdAt=>"2019-06-26T09:19:03.000Z",
       :updatedAt=>"2019-07-06T04:58:11.000Z",
       :clientId=>nil},
      {:id=>"b252eac5-f5dc-41ce-bc49-2364f5a73bb1",
       :mnemonic=>"lte",
       :description=>"Less than Equals to",
       :createdAt=>"2019-07-01T13:10:15.000Z",
       :updatedAt=>"2019-07-01T13:10:15.000Z",
       :clientId=>nil}]}]}

在这里,我无法访问每个操作员的ID。所有这些值我都存储在实例变量@ans中。

Ruby-on-Rails Ruby-on-Rails-3.2

评论


答:

0赞 Yurii Stefaniuk 7/7/2022 #1

您可以使用 digpluck 方法来做到这一点

@ans.dig(:items, 0, :operators)&.pluck(:id)

或者,如果你不使用 Rails

@ans.dig(:items, 0, :operators)&.map { |el| el[:id] }

或者,如果您使用不支持安全导航和方法的旧 ruby,则可以使用 try 方法:dig

@ans[:items].try(:[], 0).try(:[], :operators).try(:map) { |h| h[:id] }
# output

["15e8c619-7b5b-4612-b2e9-7a17112eceb9", "38888bef-5442-4c72-b88e-44f4fd3e5614", "4fd6ce17-10d3-42a3-8e4e-24773360db5d", "b252eac5-f5dc-41ce-bc49-2364f5a73bb1"]

评论

0赞 Cary Swoveland 7/7/2022
另一种选择是 老派 .如果数据格式不正确,这将(与使用 )相反,将引发异常,这对于查找问题很有用。请注意,数据的结构被认为是已知的。我不是特别挖.ans[:items][0][:operators].pluck(:id)digdig