« プログラミング講座(172) フォームエディターを GitHub で公開 | トップページ | Ruby (2) アクセスカウンター »

2016/07/09

プログラミング講座(173) 連想配列

今日はSmall Basicの配列について書いてみようと思います。
いくつか特徴があります。

・連想配列
・可変長
・インデックスの大文字/小文字を区別しない
・空の値は保持しない(インデックスごと解放)

通常の配列は数字をインデックス(添え字)としていますが、インデックスに文字列を指定できるようにしたのが連想配列です。数字も指定できます。

person[1][1] = "のんき"
person[1][2] = "たかはし"

とする代わりに

person["のんき"]["First Name"] = "たかはし"

とできます。ただし、この例はあまり良くありません。同じ「のんき」という名前を2つ以上登録できないからです。逆に重複を許さないキーをインデックスにする場合には重宝します。キーを探すことなく単にインデックスに指定すればいいからです。次の例では色のパレットを作成します。パレットは重複を必要としないので単に上書きしていけばパレットを作成できます。

palette[color] = 1

ここでさらに注意が必要です。Small Basic ではインデックスについて大文字/小文字の区別をしない点です。

star["A"]["mag"] = 3.3
star["a"]["mag"] = 4.5

とすると最初の行の値は上書きされてしまいます。これはギリシャ文字でも同じです。

star["Σ"]["mag"] = 2.0
star["σ"]["mag"] = 5.7

で最初の行は上書きされます。

モノクロのビットマップを表すとき1と0を値とする行列で表せます。このような行列は実質的には値が1の座標だけが記憶されていれば十分です。特に値1が値0に比べてかなり少ないときにスパース行列と呼ばれます。
Small Basic でスパース行列を表すには

sparse[x][y] = 1

または

sparse[x + "," + y] = 1

のように表せます。0に戻すときは0の代わりに空を入れます。

sparse[1][2] = ""

または

sparse[x + "," + y] = ""

このようにすることでメモリを節約できる上、行列が大きい場合には実行速度の向上につながります。メンガーのスポンジ (PRL427-0) は実際にスパース行列の考え方を使って処理速度を上げたプログラムの例です。

図174 メンガーのスポンジ
【図174 メンガーのスポンジ】

|

« プログラミング講座(172) フォームエディターを GitHub で公開 | トップページ | Ruby (2) アクセスカウンター »

Small Basic」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: プログラミング講座(173) 連想配列:

« プログラミング講座(172) フォームエディターを GitHub で公開 | トップページ | Ruby (2) アクセスカウンター »