ハッシュテーブル
配列では、要素にインデックス番号が付いていてその値で要素を特定してアクセスできました。このインデックス番号の代わりに、任意のキーデータを使って値を保持する仕組みがハッシュテーブルです。
let 変数:{HashTable-of キーの型, 値の型} =
{{HashTable-of キーの型, 値の型} キー0, 値0, キー1, 値1, ...}
HashTable-of も、パラメータ化クラスになっています。キーの型と値の型の両方を指定する必要があります。Array-of と同じようにキーと値の型を指定しますので型宣言自身を { } で囲みます。新しいインスタンスを生成する場合は、内側の{ } が型を指定し、外側の { } がインスタンスの生成を表すのも Array-of と同じです。HashTable-of は、値を登録した順番は持つ事ができません。キーと値の組み合わせでデータを保持します。キーはユニークである必要があります。
次のサンプルでは、キーを文字列、値を整数としたハッシュテーブルを生成し、値の設定、値の取り出しを行っています。
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
{value
let map:{HashTable-of String, int} = {{HashTable-of String, int}}
{map.set "zero", 0}
{map.set "first", 1}
{map.get "zero"}
}
実行結果は 0 が表示されます。
値を設定する場合は set メソッドを、値を取得する場合は get メソッドを使います。Array-of の時と同じように [ ] を使った表記も可能です。同じ内容で書き直してみます。
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
{value
let map:{HashTable-of String, int} = {{HashTable-of String, int}}
set map["zero"] = 0
set map["first"] = 1
map["zero"]
}
ハッシュテーブルでは、キーの有無を確認し、あれば値を取り出すような処理を書くことがよくあります。そのような処理を get-if-exists メソッドを使って効率的に書くことができます。ここでは、Curl言語の複数の値が返せる機能が利用されています。
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
{value
let map:{HashTable-of String, int} = {{HashTable-of String, int}}
{map.set "zero", 0}
{map.set "first", 1}
let (value:int, exists?:bool) = {map.get-if-exists "zero"}
{if exists? then
value
else
"nothing"
}
}
実行結果は、0 が表示されます。
| プロパティ | 内容 |
|---|---|
| element-type | 要素の型 |
| empty? | 要素が空か否か |
| key-type | キーの型 |
| size | 要素の数 |
| メソッド | 内容 |
|---|---|
| clear | 全ての要素を削除する |
| get | 指定したキーの要素を返す |
| get-if-exists | 指定したキーの要素があるか否かの判定と値を返す |
| key-exists? | 指定したキーがあるか否か |
| remove | 指定したキーの要素を削除する |
| set | 指定したキーの要素を設定する |

