删除哈希数组中的重复字段 Ruby

Delete duplicated fields in Array of Hashes Ruby

我有一个散列数组,其中包含带重复字段的 JSON,我想删除重复的字段:

[ {
  "code" : "32F",
  "lon" : 0.963335,
  "fint" : "2022-05-03T13:00:00",
  "prec" : 0.0,
},{
  "code" : "32F",
  "lon" : 0.963335,
  "fint" : "2022-05-03T13:00:00",
  "prec" : 0.0,
},{
  "code" : "90X",
  "lon" : 0.963335,
  "fint" : "2022-05-03T13:00:00",
  "prec" : 0.0,
}]

这是期望的输出:

[{
  "code" : "32F",
  "lon" : 0.963335,
  "fint" : "2022-05-03T13:00:00",
  "prec" : 0.0,
},{
  "code" : "90X",
  "lon" : 0.963335,
  "fint" : "2022-05-03T13:00:00",
  "prec" : 0.0,
}]

有什么想法吗?

谢谢!

尝试枚举模块中的 uniq。它应该适合您的用例。 默认情况下,它可用于 ruby 数组。

首先你语法错误

"code" : "32F", -- 这里不需要空格

正确的变体是 "code": "32F",

你甚至不需要在这里引用。刚刚 code: "32F",

从数组中删除 重复项——使用uniq!

小心

ary = [1, 1]
ary.uniq! # => [1]
ary # => [1]


ary = [1, 2]
ary.uniq! # => nil
ary # => [1, 2]

或者使用 uniq 而不用 bang 到 return 新数组

ary = [1, 1]
ary.uniq # => [1]
ary # => [1, 1]


ary = [1, 2]
ary.uniq # => [1, 2]
ary # => [1, 2]

你的情况

ary =
  [{
    code: "32F",
    lon: 0.963335,
    fint: "2022-05-03T13:00:00",
    prec: 0.0,
  },{
    code: "32F",
    lon: 0.963335,
    fint: "2022-05-03T13:00:00",
    prec: 0.0,
  },{
    code: "90X",
    lon: 0.963335,
    fint: "2022-05-03T13:00:00",
    prec: 0.0,
  }]

ary.uniq!
# => [{:code=>"32F", :lon=>0.963335, :fint=>"2022-05-03T13:00:00", :prec=>0.0}, {:code=>"90X", :lon=>0.963335, :fint=>"2022-05-03T13:00:00", :prec=>0.0}]

使用 .uniq 这应该适合您。 注意:您的哈希数组在每个键后都有额外的 space。你应该删除它。