"HashTable" (データ構造)
"HashTable"
キーと値が一般式であるハッシュテーブルを表す.
詳細
- ハッシュテーブルは,キーの使用によって取り出すことができる個々の値を保存するのに役立つ.
-
CreateDataStructure["HashTable"] 新しい空の"HashTable"を作成する CreateDataStructure["HashTable",assoc] assoc からの規則を含む新しい"HashTable"を作成する Typed[x,"HashTable"] x に"HashTable"型を与える - "HashTable"型のデータ構造には,以下の演算が使える.
-
ds["Copy"] ds のコピーを返す time: O(n) ds["Elements"] ds の要素のリストを返す time: O(n) ds["EmptyQ"] ds が要素を持たない場合はTrue time: O(1) ds["Insert",keyvalue] 関連付けられた value とともに key を ds に加え,追加が成功した場合にはTrueを返す time: O(1) ds["KeyDrop",key] key とその値を ds から省く time: O(1) ds["KeyDropAll"] すべてのキーとその値を ds から省く time: O(n) ds["KeyExistsQ",key] key が ds 内にある場合はTrue time: O(1) ds["Keys"] ds のキーをリストとして返す time: O(n) ds["Length"] ds に保存されるキーと値のペアの数 time: O(1) ds["Lookup",key] ds 内に key と一緒に保存された値を返す.キーが見付からない場合はMissing オブジェクトを返す time: O(1) ds["Lookup",key,defFun] ds 内に key と一緒に保存された値を返す.キーが見付からない場合は defFun[key]を返す time: O(1) ds["Values"] ds の値をリストとして返す time: O(n) ds["Visualization"] ds の可視化を返す time: O(n) - 以下の関数もサポートする.
-
dsi===dsj dsi が dsj に等しい場合はTrue FullForm[ds] ds の完全形 Information[ds] ds についての情報 InputForm[ds] ds の入力形 Normal[ds] ds を通常の式に変換する
例題
すべて開く すべて閉じる例 (2)
新しい"HashTable"は,CreateDataStructureを使って作成できる:
ds = CreateDataStructure["HashTable"]ds["Insert", f[1] -> g[2]]ds["Length"]ds["KeyExistsQ", f[1]]ds["Lookup", f[1]]キーが見付からない場合には,Missingオブジェクトが返される:
ds["Lookup", f[2]]Normal[ds]ds = CreateDataStructure["HashTable"];
Do[ds["Insert", i -> True], {i, 30}]
ds["Visualization"]スコープ (15)
作成 (2)
空の"HashTable"を作成する:
CreateDataStructure["HashTable"]初期要素を含む"HashTable"を作成する:
CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]情報 (1)
新しい"HashTable"は,CreateDataStructureを使って作成することができる:
ds = CreateDataStructure["HashTable"]Information[ds]演算 (12)
"Copy" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]ds1 = ds["Copy"]{Normal[ds], Normal[ds1]}ds1["Insert", "d" -> 4];
{Normal[ds], Normal[ds1]}"Elements" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]ds["Elements"]NormalはコンテンツをAssociationとして返す:
Normal[ds]"EmptyQ" (1)
空の"HashTable"を作成する:
ds = CreateDataStructure["HashTable"];
ds["EmptyQ"]ds["Insert", "a" -> 1];
ds["EmptyQ"]"Insert" (1)
空の"HashTable"を作成する:
ds = CreateDataStructure["HashTable"]キーと値のペアをテーブルに挿入し,挿入に成功した場合にはTrueを返す:
ds["Insert", "a" -> 1]同じペアをもう一度挿入することは不可能なので,Falseが返される:
ds["Insert", "a" -> 1]"KeyDrop" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]キーと値のペアをそのキーを使ってテーブルから削除し,削除に成功した場合にはTrueを返す:
ds["KeyDrop", "b"]Normal[ds]"KeyDropAll" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]ds["KeyDropAll"]ds["Length"]"KeyExistsQ" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]{ds["KeyExistsQ", "b"], ds["KeyExistsQ", "d"]}"Keys" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]ds["Keys"]"Length" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]ds["Length"]Lengthも同じ値を返す:
Length[ds]"Lookup" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]ds["Lookup", "a"]テーブル内にキーがない場合には,Missingが返される:
ds["Lookup", "d"]キーが見付からない場合には,第3引数を使ってキーに適用されるべき関数を指定することができる:
ds["Lookup", "d", notfound]"Values" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]ds["Values"]"Visualization" (1)
初期要素を含む"HashTable"を作成する:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]ds["Visualization"]アプリケーション (2)
メモ化 (1)
ハッシュテーブルは,計算に使える値を保存するのに便利である.これはメモ化として知られるプロセスである.ここでは,フィボナッチ計算に適用する例を示す:
Fib[n_] :=
iFib[CreateDataStructure["HashTable"], n]iFib[st_, n_] :=
Module[{res},
Which[
n ≤ 1,
n,
st["KeyExistsQ", n],
st["Lookup", n],
True,
res = iFib[st, n - 2] + iFib[st, n - 1];
st["Insert", n -> res];
res
]]Fib[100]Fib[1000]頻度を数える (1)
counts[list_List] := Module[{ht, c},
ht = CreateDataStructure["HashTable"];
Do[
c = ht["Lookup", elem, (ht["Insert", elem -> 0];0)&];
ht["Insert", elem -> c + 1]
,
{elem, list}
];
Normal[ht]
]counts[{a, b, c, a}]//KeySort組込みのCounts関数と比べる:
Counts[{a, b, c, a}]//KeySort特性と関係 (5)
InputForm (1)
InputFormは,"HashTable"の連続番号付きのコンテンツを返す:
InputForm[CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>]]この連続番号付きの形式を使ってデータ構造を再作成することができる:
DataStructure["HashTable", {"Data" -> {"c" -> 3, "a" -> 1, "b" -> 2}}]Length (1)
Lengthを使って"HashTable"内の要素数を得ることができる:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>];
Length[ds]ds["Length"]Normal (1)
Normalを使って"HashTable"の要素を得ることができる:
ds = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>];
Normal[ds]ds["Elements"]SameQ (1)
SameQを使って,2つのハッシュテーブルに同じ要素が同じ順序で含まれるかどうかをテストすることができる:
ds1 = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>];
ds2 = CreateDataStructure["HashTable", <|"a" -> 1, "b" -> 2, "c" -> 3|>];
ds1 === ds2"OrderedHashTable" (1)
"HashTable"に使えるアルゴリズムの多くは"OrderedHashTable"にも使える.
"HashTable"の場合とは違って,"OrderedHashTable"にキーと値のペアが挿入される順序は保存される.
履歴
2020 で導入 (12.1)