Contents
連想配列とは、自動的に割り当てられる数字をキーとして持つかわりに、自由に任意の文字列を割り振ることができる配列のことです。添え字に番号の変わりに名前をつけることでわかりやすく管理することができます。
- 構文
- // 連想配列の宣言
HASHTBL 変数
// 大文字小文字を区別する(デフォルトは区別しない)
HASHTBL 変数 = HASH_CASECARE
// 順列で読出す時にキーはソートされている
HASHTBL 変数 = HASH_SORT
// キーにデータを代入
変数[キー] = データ
// キーが存在するか
変数[キー, HASH_EXISTS]
// キーを削除
変数[キー, HASH_REMOVE]
// 指定した順列番号のキーを取得
変数[順列番号, HASH_KEY]
// 指定した順列番号のデータを取得
変数[順列番号, HASH_VAL]
// 連想配列を削除
変数 = HASH_REMOVEALL
- 引数
- 戻値
自作関数
プログラム実行例
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
FOR item IN fruits
PRINT item + ":" + fruits[item]
NEXT
- 結果
- apple:りんご
grape:ぶどう
cherry:さくらんぼ
peach:もも
banana:バナナ
連想配列をキーでソートする
キーをソートするには宣言時に「HASH_SORT」を指定します。
HASHTBL fruits = HASH_SORT
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
FOR item IN fruits
PRINT item + ":" + fruits[item]
NEXT
- 結果
- apple:りんご
banana:バナナ
cherry:さくらんぼ
grape:ぶどう
peach:もも
連想配列のキーの大文字小文字の区別をする
キーの大文字と小文字を区別するには宣言時に「HASH_CASECARE」を指定します。指定したキーの大文字と小文字を区別するので、「PRINT fruits["Apple"]」ではりんごは出力されません。
HASHTBL fruits = HASH_CASECARE
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT fruits["Apple"]
PRINT fruits["grape"]
- 結果
ぶどう
連想配列のキーでソートし、かつ、大文字小文字を区別する
キーの大文字と小文字を区別し、さらにソートするには宣言時に「HASH_SORT OR HASH_CASECARE」を指定します。
HASHTBL fruits = HASH_SORT OR HASH_CASECARE
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT fruits["Apple"]
PRINT fruits["grape"]
PRINT
FOR item IN fruits
PRINT item + ":" + fruits[item]
NEXT
- 結果
ぶどう
apple:りんご
banana:バナナ
cherry:さくらんぼ
grape:ぶどう
peach:もも
連想配列のキーが存在するか調べる
HASH_EXISTSでキーが存在するかどうかを調べることができます。以下の例の場合apple(りんご)は宣言されているのでTrueを返しますが、pear(梨)は宣言されていないのでFalseが返ります。
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT "apple:" + fruits["apple", HASH_EXISTS]
PRINT "pear:" + fruits["pear", HASH_EXISTS]
- 結果
- apple:True
pear:False
連想配列のキーを削除する
キーを削除するにはHASH_REMOVEを使います。キーを削除できた場合Trueが返ります。
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT fruits["apple", HASH_REMOVE]
PRINT "apple:" + fruits["apple", HASH_EXISTS]
- 結果
- True
apple:False
順列番号でキーを取得するにはHASH_KEY、値を取得するにはHASH_VALを指定します。連想配列の最大要素数は「LENGTH(変数) - 1」で取得できます。
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
FOR n = 0 TO LENGTH(fruits) - 1
PRINT fruits[n, HASH_KEY] + ":" + fruits[n, HASH_VAL]
NEXT
- 結果
- apple:りんご
grape:ぶどう
cherry:さくらんぼ
peach:もも
banana:バナナ
連想配列を削除するには「HASH_REMOVEALL」を使います。
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT "HASH_REMOVEALL実行前"
PRINT fruits["apple"]
PRINT
fruits = HASH_REMOVEALL
PRINT "HASH_REMOVEALL実行後"
PRINT fruits["apple"]
- 結果
- HASH_REMOVEALL実行前
りんご
HASH_REMOVEALL実行後
連想配列のキーと値を入れ替える
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
hashInvert(fruits)
FOR n = 0 TO LENGTH(fruits) - 1
PRINT fruits[n, HASH_KEY] + ":" + fruits[n, HASH_VAL]
NEXT
//////////////////////////////////////////////////
// 【引数】
// hash : キーと値を入れ替える連想配列(参照引数)
// 【戻値】
//
//////////////////////////////////////////////////
PROCEDURE hashInvert(Var hash[])
HASHTBL tmp
DIM cnt = LENGTH(hash)
FOR n = 0 TO cnt - 1
tmp[hash[n, HASH_VAL]] = hash[n, HASH_KEY]
NEXT
hash = HASH_REMOVEALL
FOR n = 0 TO cnt - 1
hash[tmp[n, HASH_KEY]] = tmp[n, HASH_VAL]
NEXT
FEND
- 結果
- りんご:apple
ぶどう:grape
さくらんぼ:cherry
もも:peach
バナナ:banana