Techioz Blog

Railsのハッシュで1つの値に対して2つのキーを設定する

概要

ハッシュがあるとしましょう:

{
  first: :value1,
  second: :value1,
  third: :value2 
}

.map の作成中に重複を削除する必要があるため、最初または 2 番目のみにする必要があります。次のような回避策は可能ですか:

{
  (:first || :second) => :value1,
  third: :value2 
}

そうでない場合、条件に基づいてハッシュ内のキーの重複を削除するにはどうすればよいですか? .uniq ブロックに条件を渡すことはできますか?

ありがとう、

解決策

hsh =
  {
    first: :value1,
    second: :value1,
    third: :value2 
  }

hsh.uniq { _2 }.to_h
# => {:first=>:value1, :third=>:value2}

まず、ブロックと番号付きパラメータを指定して uniq を呼び出します。 2 番目の要素が一意である配列の配列を返します (最初のペアを取得します)。

ary = hsh.uniq { _2 }
# => [[:first, :value1], [:third, :value2]]

そして配列をハッシュに変換します

ary.to_h
# => {:first=>:value1, :third=>:value2}