ハッシュ内のキーと値を交換する方法

ジョナサン・アラード

ハッシュでキーと値を交換するにはどうすればよいですか?

私は次のハッシュを持っています:

{:a=>:one, :b=>:two, :c=>:three}

私が変換したいもの:

{:one=>:a, :two=>:b, :three=>:c}

使用するのmapはかなり面倒なようです。より短い解決策はありますか?

ナイジェルソーン

Rubyには、ハッシュを反転したかのように扱うことができるハッシュのヘルパーメソッドがあります(本質的には、値を介してキーにアクセスできるようにします)。

{a: 1, b: 2, c: 3}.key(1)
=> :a

反転したハッシュを保持したい場合は、Hash#invertがほとんどの状況で機能するはずです。

{a: 1, b: 2, c: 3}.invert
=> {1=>:a, 2=>:b, 3=>:c}

だが...

重複する値がある場合はinvert、最後に出現した値を除くすべてを破棄します(反復中にそのキーの新しい値を置き換え続けるため)。同様にkey、最初の一致のみを返します。

{a: 1, b: 2, c: 2}.key(2)
=> :b

{a: 1, b: 2, c: 2}.invert
=> {1=>:a, 2=>:c}

したがって、値が一意である場合は、を使用できますHash#invertそうでない場合は、次のようにすべての値を配列として保持できます。

class Hash
  # like invert but not lossy
  # {"one"=>1,"two"=>2, "1"=>1, "2"=>2}.inverse => {1=>["one", "1"], 2=>["two", "2"]} 
  def safe_invert
    each_with_object({}) do |(key,value),out| 
      out[value] ||= []
      out[value] << key
    end
  end
end

注:テストを含むこのコードは現在GitHubにあります

または:

class Hash
  def safe_invert
    self.each_with_object({}){|(k,v),o|(o[v]||=[])<<k}
  end
end

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

キャッシュ交換時にキャッシュセット内のデータを出力する方法は?

分類Dev

Rubyでハッシュキーを値と交換し、キーをシンボルに変換しますか?

分類Dev

Rubyハッシュでキーを交換する

分類Dev

この「ハッシュのような」文字列をキーと値のペアに変換する方法

分類Dev

ユーザー入力をハッシュ内の値と比較する方法

分類Dev

マップ内のキーと値をエレガントに交換する方法

分類Dev

Redis、セットをハッシュキーの値として保存する方法

分類Dev

キーと値の両方でハッシュをソートする方法

分類Dev

ハッシュマップ内の単一のキーの値のリストに値を追加する方法(Java)

分類Dev

配列内のハッシュキーをah`ashの値に置き換える必要があります

分類Dev

キーと値をハッシュにプッシュする

分類Dev

文字列内の数値をハッシュに変換する方法

分類Dev

配列要素をハッシュキーとして使用し、すべてのハッシュ値をすべて指定された値に設定して、配列をハッシュに変換する方法

分類Dev

ハッシュマップ内で文字列とハッシュマップの混合値を取得する方法

分類Dev

Perl:キーと値の配列をハッシュに変換します

分類Dev

配列をハッシュマップ(キーと値のペア)に変換するjavascript

分類Dev

キーと値のペアである文字列をRubyのハッシュに変換します

分類Dev

rubyで同じキーを使用して配列ハッシュ内の値を合計する方法

分類Dev

URLのハッシュ値からキーと値のペアを取得する方法

分類Dev

キーのリストと値のリストを匿名のハッシュのリストに変換するための簡潔な方法

分類Dev

2つのハッシュマップから共通のキーと値のペアを取得する方法

分類Dev

キーと値JSONを交換する

分類Dev

キーを値と交換する

分類Dev

ハッシュの配列を含むハッシュ内にキーが存在することをRspecでテストする方法

分類Dev

Javaでハッシュマップのキーと値に個々の数量を追加する方法

分類Dev

類似のキーと値を含むマッピングハッシュを最適化する方法は?

分類Dev

JavaScriptでハッシュからキーと値を削除する方法

分類Dev

ルビー言語を使用してキーと値のペアをハッシュに追加する方法

分類Dev

ツリーマップ内の特定のキーの値を交換すると、すべてのキーの値を変更します

Related 関連記事

  1. 1

    キャッシュ交換時にキャッシュセット内のデータを出力する方法は?

  2. 2

    Rubyでハッシュキーを値と交換し、キーをシンボルに変換しますか?

  3. 3

    Rubyハッシュでキーを交換する

  4. 4

    この「ハッシュのような」文字列をキーと値のペアに変換する方法

  5. 5

    ユーザー入力をハッシュ内の値と比較する方法

  6. 6

    マップ内のキーと値をエレガントに交換する方法

  7. 7

    Redis、セットをハッシュキーの値として保存する方法

  8. 8

    キーと値の両方でハッシュをソートする方法

  9. 9

    ハッシュマップ内の単一のキーの値のリストに値を追加する方法(Java)

  10. 10

    配列内のハッシュキーをah`ashの値に置き換える必要があります

  11. 11

    キーと値をハッシュにプッシュする

  12. 12

    文字列内の数値をハッシュに変換する方法

  13. 13

    配列要素をハッシュキーとして使用し、すべてのハッシュ値をすべて指定された値に設定して、配列をハッシュに変換する方法

  14. 14

    ハッシュマップ内で文字列とハッシュマップの混合値を取得する方法

  15. 15

    Perl:キーと値の配列をハッシュに変換します

  16. 16

    配列をハッシュマップ(キーと値のペア)に変換するjavascript

  17. 17

    キーと値のペアである文字列をRubyのハッシュに変換します

  18. 18

    rubyで同じキーを使用して配列ハッシュ内の値を合計する方法

  19. 19

    URLのハッシュ値からキーと値のペアを取得する方法

  20. 20

    キーのリストと値のリストを匿名のハッシュのリストに変換するための簡潔な方法

  21. 21

    2つのハッシュマップから共通のキーと値のペアを取得する方法

  22. 22

    キーと値JSONを交換する

  23. 23

    キーを値と交換する

  24. 24

    ハッシュの配列を含むハッシュ内にキーが存在することをRspecでテストする方法

  25. 25

    Javaでハッシュマップのキーと値に個々の数量を追加する方法

  26. 26

    類似のキーと値を含むマッピングハッシュを最適化する方法は?

  27. 27

    JavaScriptでハッシュからキーと値を削除する方法

  28. 28

    ルビー言語を使用してキーと値のペアをハッシュに追加する方法

  29. 29

    ツリーマップ内の特定のキーの値を交換すると、すべてのキーの値を変更します

ホットタグ

アーカイブ