dictionary型

Dictionary型は、キーと値のペアのコレクションを表します。


taiseiue | 2025-01-08

定義

名前空間: Alice
アセンブリ: Losetta.dll

AliceScript
namespace Alice;
public class dictionary;

対応
AliceScript 4
AliceSister 4
Losetta 0.11

コンストラクター

プロパティ

Keys辞書内にあるキーのリストを返します
Length辞書内にあるキーと値のペアの数を表します
Values辞書内にある項目の値のリストを返します

メソッド

Add(variable,variable)キーと値を指定して、辞書に新しい項目を追加します
Add(KeyValuePair)キーと値のペアを指定して、辞書に新しい項目を追加します
Clear()辞書内のすべての項目を削除します
ContainsKey(variable)指定したキーが辞書内に存在するかを調べます
ContainsValue(variable)指定した値が辞書内に存在するかを調べます
EnsureCapacity(number)辞書の容量を指定した値以上に拡張します
Remove(variable)辞書から指定したキーの項目を削除します
ToArray()現在の辞書にあるキーと値のペアを新しい配列にコピーします
TrimExcess(number)辞書の容量を指定した値にします
TrimExcess()辞書の容量を現在辞書内に存在する項目の数と同じまで減らします
TryAdd(variable,variable)キーと値を指定して、辞書への新しい項目の追加を試みます
TryAdd(KeyValuePair)キーと値のペアを指定して、辞書への新しい項目の追加を試みます
TryGetValue(variable,ref variable)辞書内で、指定されたキーに関連づけられている値の取得を試みます

説明

Dictionary型は、キーから値を取得できるようにします。 ディクショナリは、ハッシュテーブルのため、キーを使用した値の取得にかかる計算量はほぼ\(O(1)\)で高速です。 ディクショナリの各キーは、その中で一意である必要があります。 重複しているキーをAddメソッドで追加しようとすると、例外が発生します。

Capacityの容量は、このディクショナリが持てる要素の個数です。 容量を超える要素がディクショナリに追加されると、内部で配列のアロケーションが起こります。

コラム

ディクショナリで使用する要素数があらかじめ決まっている場合は、Capacityを指定して初期化することで、アロケーションを防ぐことができます。

ディクショナリ型をforeach文で使用すると、キーと値のペアが列挙できます。 次の例をご覧ください。

AliceScript
foreach(var kvp in dict)
{
    print($"Key = {kvp.Key}, Value = {kvp.Value}");
}

スレッドセーフ

Dictionary内の要素が変更されない限り、複数の場所からの読み取りをサポートします。ただし、キーと値のペアを列挙する操作はスレッドセーフではありません。(稀ですが)列挙が書き込みと競合する可能性のあるケースでは、列挙中はロックする必要があります。

配列型との互換性

Dictionary型はarrayの特徴を持っており、対応するDictionary型のメソッドが存在しない場合は、インスタンスをKeyValuePairの配列とみなしてArray型のメソッドを使用できます。たとえば、次の例ではArray型のWhereメソッドをDictionary型に使用しています。

AliceScript
dictionary dict = {
    "zero": 0,
    "one": 1,
    "two": 2
};

var array = dict.Where(kvp => kvp.Value > 0);