Arrays 基于嵌套值从哈希数组中干净地删除哈希
我遇到了一个有趣的情况。如果哈希数组中的某个特定值是重复的,我想从该数组中删除该值。以下是我正在使用的结构示例:Arrays 基于嵌套值从哈希数组中干净地删除哈希,arrays,ruby-on-rails,ruby,hashmap,unique,Arrays,Ruby On Rails,Ruby,Hashmap,Unique,我遇到了一个有趣的情况。如果哈希数组中的某个特定值是重复的,我想从该数组中删除该值。以下是我正在使用的结构示例: [ { "PCDBPart": { "Category": { "ID": 22, "Name": "Wiper and Washer" } }, "Position": { "Name": "Right", "PCDBPositionID": 12, "Posit
[
{
"PCDBPart": {
"Category": {
"ID": 22,
"Name": "Wiper and Washer"
}
},
"Position": {
"Name": "Right",
"PCDBPositionID": 12,
"PositionID": 10
}
},
{
"PCDBPart": {
"Category": {
"ID": 22,
"Name": "Wiper and Washer"
}
},
"Position": {
"Name": "Right",
"PCDBPositionID": 12,
"PositionID": 10
}
},
{
"PCDBPart": {
"Category": {
"ID": 24,
"Name": "Wiper and Washer"
}
},
"Position": {
"Name": "Right",
"PCDBPositionID": 2,
"PositionID": 4
}
}
]
我遇到的问题是位置
中的值经常重复,使得数组变大。我想返回一个数组,其哈希值由它们包含的PositionID
唯一
我尝试使用my_array.uniq{| h | h.dig(:Position,:PositionID)}
,但似乎只返回一个值:
[
{
"PCDBPart": {
"Category": {
"ID": 22,
"Name": "Wiper and Washer"
}
},
"Position": {
"Name": "Right",
"PCDBPositionID": 12,
"PositionID": 10
}
},
]
以下是所需的输出:
[
{
"PCDBPart": {
"Category": {
"ID": 22,
"Name": "Wiper and Washer"
}
},
"Position": {
"Name": "Right",
"PCDBPositionID": 12,
"PositionID": 10
}
},
{
"PCDBPart": {
"Category": {
"ID": 24,
"Name": "Wiper and Washer"
}
},
"Position": {
"Name": "Right",
"PCDBPositionID": 2,
"PositionID": 4
}
}
]
有人对如何进行有什么建议吗?我不明白。只有两个键
:PCDBPositionID
,它们的值不同(12
和2
),因此没有重复项。给出示例时,应始终显示所需的返回值。您的标题正确地引用了一个哈希数组,但您在文本中反向引用了它。这是一个纯粹的Ruby问题,因此我建议您删除Rails标记,这样任何过滤“Ruby”但过滤掉“Rails”的读者都会看到您的问题。@CarySwoveland您是对的。编辑问题,使输入/输出更加具体。如果arr
是您的数组,您只需编写a=arr.uniq
。然后a.size#=>2;a[0]==arr[0]#=>true;a[1]==arr[2]#=>true
,但这只是因为在您的示例中,第一个在arr
中散列的(arr[0]
和arr[1]
)是相等的。如果arr[0][:Position][:PCDBPositionID]
等于arr[1][:Position][:PCDBPositionID]
当arr[0]
不等于arr[1]
时,我们需要知道保留哪个散列,arr[0]
或arr[1]
。我不明白。只有两个键:PCDBPositionID
,它们的值不同(12
和2
),因此没有重复项。给出示例时,应始终显示所需的返回值。您的标题正确地引用了一个哈希数组,但您在文本中反向引用了它。这是一个纯粹的Ruby问题,因此我建议您删除Rails标记,这样任何过滤“Ruby”但过滤掉“Rails”的读者都会看到您的问题。@CarySwoveland您是对的。编辑问题,使输入/输出更加具体。如果arr
是您的数组,您只需编写a=arr.uniq
。然后a.size#=>2;a[0]==arr[0]#=>true;a[1]==arr[2]#=>true
,但这只是因为在您的示例中,第一个在arr
中散列的(arr[0]
和arr[1]
)是相等的。如果arr[0][:Position][:PCDBPositionID]
等于arr[1][:Position][:PCDBPositionID]
当arr[0]
不等于arr[1]
时,我们需要知道保留哪个散列,arr[0]
或arr[1]
。