Elixir-keyword-lists

提供:Dev Guides
移動先:案内検索

Elixir-キーワードリスト

これまで、連想データ構造、つまり特定の値(または複数の値)をキーに関連付けることができるデータ構造については説明していません。 異なる言語は、辞書、ハッシュ、連想配列などの異なる名前でこれらの機能を呼び出します。

Elixirには、キーワードリストとマップという2つの主要な連想データ構造があります。 この章では、キーワードリストに焦点を当てます。

多くの関数型プログラミング言語では、連想データ構造の表現として2項目タプルのリストを使用するのが一般的です。 Elixirでは、タプルのリストとタプルの最初のアイテム(つまり、 キー)はアトムであり、キーワードリストと呼びます。 同じことを理解するために、次の例を検討してください-

list = [{:a, 1}, {:b, 2}]

Elixirは、このようなリストを定義するための特別な構文をサポートしています。 各アトムの最後にコロンを配置して、タプルを完全に取り除くことができます。 例えば、

list_1 = [{:a, 1}, {:b, 2}]
list_2 = [a: 1, b: 2]
IO.puts(list_1 == list_2)

上記のプログラムは、次の結果を生成します-

true

これらは両方ともキーワードリストを表します。 キーワードリストもリストであるため、それらのリストで使用したすべての操作を使用できます。

キーワードリスト内のアトムに関連付けられた値を取得するには、リストの名前の後に[]としてアトムを渡します-

list = [a: 1, b: 2]
IO.puts(list[:a])

上記のプログラムは、次の結果を生成します-

1

キーワードリストには3つの特別な特性があります-

  • キーはアトムでなければなりません。
  • キーは、開発者が指定した順序で並べられます。
  • キーは複数回指定できます。

Elixirはキーワードリストを操作するために、https://elixir-lang.org/docs/stable/elixir/Keywordl [キーワードモジュール]を提供しています。 ただし、キーワードリストは単なるリストであり、リストと同じ線形パフォーマンス特性を提供します。 リストが長いほど、キーの検索、アイテム数のカウントなどに時間がかかります。 このため、キーワードリストは主にオプションとしてElixirで使用されます。 多くのアイテムを保存する必要がある場合、または1つのキーに最大の1つの値を関連付ける必要がある場合は、代わりにマップを使用する必要があります。

キーへのアクセス

特定のキーに関連付けられた値にアクセスするには、 Keyword.get 関数を使用します。 指定されたキーに関連付けられた最初の値を返します。 すべての値を取得するには、Keyword.get_values関数を使用します。 たとえば-

kl = [a: 1, a: 2, b: 3]
IO.puts(Keyword.get(kl, :a))
IO.puts(Keyword.get_values(kl))

上記のプログラムは、次の結果を生成します-

1
[1, 2]

キーを挿入する

新しい値を追加するには、 Keyword.put_new を使用します。 キーが既に存在する場合、その値は変更されません-

kl = [a: 1, a: 2, b: 3]
kl_new = Keyword.put_new(kl, :c, 5)
IO.puts(Keyword.get(kl_new, :c))

上記のプログラムを実行すると、追加のキーcを含む新しいキーワードリストが生成され、次の結果が生成されます-

5

キーを削除する

キーのすべてのエントリを削除する場合は、 Keyword.delete; を使用してキーの最初のエントリのみを削除し、 Keyword.delete_first を使用します。

kl = [a: 1, a: 2, b: 3, c: 0]
kl = Keyword.delete_first(kl, :b)
kl = Keyword.delete(kl, :a)

IO.puts(Keyword.get(kl, :a))
IO.puts(Keyword.get(kl, :b))
IO.puts(Keyword.get(kl, :c))

これにより、リストの最初の b とリストのすべての a が削除されます。 上記のプログラムが実行されると、次の結果が生成されます-

0