从Ruby中的哈希数组中收集唯一元素



我有这个数据:

[
{
"identifier"=>"A",
"inclusion"=>"true",
"name"=>"FGFR2",
"specific"=>"false"
},
0
],
[
{
"identifier"=>"A",
"inclusion"=>true",
"name"=>"FGFR2",
"specific"=>"false"
},
1
],
[
{
"identifier"=>"B",
"inclusion"=>"true",
"name"=>"ALK",
"specific"=>"false"
},
{
"identifier"=>"A",
"inclusion"=>"true",
"name"=>"FGFR2",
"specific"=>"false"
},
4
],
[
{
"identifier"=>"A",
"inclusion"=>"true",
"name"=>"FGFR2",
"specific"=>"false"
},
5
]
]

我正在尝试基于关键字"标识符"提取唯一元素,该关键字保留已存储的索引

我想要像这个一样的输出

[
{
"identifier"=>"A",
"inclusion"=>"true",
"name"=>"FGFR2",
"specific"=>"false"
},
0
],
[
{
"identifier"=>"B",
"inclusion"=>"true",
"name"=>"ALK",
"specific"=>"false"
},
{
"identifier"=>"A",
"inclusion"=>"true",
"name"=>"FGFR2",
"specific"=>"false"
},
4
]
]

我尝试了几种使用map的方法,each_with_index和map_with_inindex,但它们并没有按预期工作。

有人能帮帮我吗?

我相信Ruby专家可以极大地改进它,但这里有一个代码应该做你想做的:

  • array是数组的初始数组的名称
  • 然后,我创建这个array的副本,只保留标识符。array2 = [["A"], ["A"], ["B", "A"], ["A"]]
  • 然后我在array上迭代,对于每个元素,检查这个元素在array2中的第一个位置是否等于array2中的当前位置
array = [[{"identifier" => "A"...},0]...]
array2 = array.map { |arr| arr.map { |obj| obj.is_a?(Hash) ? obj['identifier'] : nil }.compact }
array.each_with_index.map { |arr, i| array2.index(array2[i]).eql?(i) ? arr : nil }.compact
# [[{"identifier"=>"A", "inclusion"=>"true", "name"=>"FGFR2", "specific"=>"false"}, 0], [{"identifier"=>"B", "inclusion"=>"true", "name"=>"ALK", "specific"=>"false"}, {"identifier"=>"A", "inclusion"=>"true", "name"=>"FGFR2", "specific"=>"false"}, 4]]

最新更新