Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 基于嵌套值从哈希数组中干净地删除哈希_Arrays_Ruby On Rails_Ruby_Hashmap_Unique - Fatal编程技术网

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]