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