Techioz Blog

ハッシュ配列 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,
}]

何か案は?

ありがとう!

解決策

まず構文が間違っています

“code” : “32F”, – ここに空白は必要ありません

右側のバリアントは「コード」:「32F」です。

そして、ここでは引用符さえ必要ありません。 「32F」とコードを入力するだけです。

配列から重複を削除するには – uniq を使用してください。

気をつけて

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


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

または、bang なしで uniq を使用して新しい配列を返します

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}]