連想配列

連想配列とは、自動的に割り当てられる数字をキーとして持つかわりに、自由に任意の文字列を割り振ることができる配列のことです。添え字に番号の変わりに名前をつけることでわかりやすく管理することができます。

構文
// 連想配列の宣言
HASHTBL 変数

// 大文字小文字を区別する(デフォルトは区別しない)
HASHTBL 変数 = HASH_CASECARE

// 順列で読出す時にキーはソートされている
HASHTBL 変数 = HASH_SORT

// キーにデータを代入
変数[キー] = データ

// キーが存在するか
変数[キー, HASH_EXISTS]

// キーを削除
変数[キー, HASH_REMOVE]

// 指定した順列番号のキーを取得
変数[順列番号, HASH_KEY]

// 指定した順列番号のデータを取得
変数[順列番号, HASH_VAL]

// 連想配列を削除
変数 = HASH_REMOVEALL
引数
戻値

自作関数

timeValue
指定した時間のシリアル値を求める。
convert
変換前単位で表される数値を、変換後単位の数値に変換します。

プログラム実行例

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