提问人:Animesh Arya 提问时间:7/7/2022 更新时间:7/7/2022 访问量:56
从多维哈希区访问值
Access value from multidimensional Hash rails
问:
我必须访问每个操作员的 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中。
答:
0赞
Yurii Stefaniuk
7/7/2022
#1
@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)
dig
dig
评论