【Mind】「型紙」の素振りで、なんちゃってハッシュマップ

Mind v7よりC言語の構造体みたいな「型紙」がサポートされました。
いままでの構造体は、型の定義とメモリー確保を一緒に実施してしまっていたんですがそこを分離できるそうです。そこで、その「型紙」の練習(素振り)としてなんちゃってハッシュマップを作ってみました。
連想配列とかいうやつです。awkとかでも装備されていて割と好きな機能です。JavaもコレクションライブラリにHashMapがありますし。
ただし、今回の実装はいつもどおり「なんちゃって」なので内部でハッシュ値計算していません。(だめじゃん)
それは、ほらそのうち実装するのですよ。(たぶん)
あ。あとKeyもValueも文字列しかダメです。あはははは。
ちゃんとしたハッシュマップを実装するなら、構造体のリストを作らないとだめだなぁと思い始めています。ただ、構造体ポインタみたいのを扱えるのかどうか不明なので(自分で実装かもなぁ..)まだ構想段階ですw
ハッシュ値がダブっちゃったときに配列だと都合が悪いんですよ。定義時に個数指定しなきゃダメだし。
さて、素振り結果の公開です。
いつもどおりバグバグしていると思うので雰囲気を感じてもらえると…(弱気)
今回はテストプログラムから見てもらうと、「こんなかんじ」ってところがわかってもらえそうなので、そちらから。
■テストプログラム

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
※ テストプログラム
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
メインとは
ハッシュ1は 構造体 ハッシュ型
ワーク値は 文字列
ハッシュ1で ハッシュを初期化して
ハッシュ1と "key1"と "abc"で ハッシュへセットして
ハッシュ1と "key2"と "cde"で ハッシュへセットして
ハッシュ1と "key3"と "efg"で ハッシュへセットして
ハッシュ1と "key4"と "hij"で ハッシュへセットして
ハッシュ1と "key3"と "xxx"で ハッシュへセットして
ハッシュ1の ハッシュの内容を全部表示して
「-------------」を 一行表示する
ハッシュ1と "key2"で ハッシュから得て ワーク値へ 入れ
"key2"と ワーク値で ハッシュ1レコード表示する
ハッシュ1と "key5"で ハッシュから得て ワーク値へ 入れ
"key5"と ワーク値で ハッシュ1レコード表示する。

■実行結果

ハッシュカウンタ:5
"key1","abc"
"key2","cde"
"key3","xxx"
"key4","hij"
-------------
"key2","cde"
"key5","!"

■なんちゃってハッシュマップ(そのうち、ちゃんとしたい…)

※
※ 型紙のテスト ~ ★なんちゃってハッシュマップ実装
※
ハッシュ型は 型紙
ハッシュキーワードは 文字列実体
ハッシュ値は      文字列実体
ハッシュ対は ハッシュキーワードと ハッシュ値
ハッシュカウンタは       変数
全体は ハッシュカウンタと 100個の ハッシュ対。
ハッシュを初期化とは (ハッシュ型 -> ・)
処理対象ハッシュは 構造体情報
処理対象ハッシュへ 入れ
処理対象ハッシュの ハッシュカウンタに 1を 入れる。
ハッシュ値を計算とは (ハッシュ型、文字列 -> ハッシュ値)
処理対象ハッシュは 構造体情報
ワークキーワードは 文字列
ワークカウンタは 変数
処理対象ハッシュと ワークキーワードに 入れ
処理対象ハッシュの ハッシュカウンタを ワークカウンタへ 入れ
ワークカウンタを 一つ減少して
ワークカウンタで 回数指定して
処理対象ハッシュの ハッシュキーワード(回数)が ワークキーワードと 等しい文字列
ならば 回数を 返し 終わる
つぎに
繰り返す
0を 返す。
 
ハッシュへセットするとは (ハッシュ型、キーワード、値 -> ・)
処理対象ハッシュは 構造体情報
ワークカウンタは 変数
ワークキーワードは 文字列
ワーク値は 文字列
処理対象ハッシュと ワークキーワードと ワーク値へ 入れ
処理対象ハッシュと ワークキーワードで ハッシュ値を計算し ワークカウンタへ 入れ
ワークカウンタが ゼロ?
ならば
処理対象ハッシュの ハッシュカウンタを ワークカウンタへ 入れ
処理対象ハッシュの ハッシュカウンタを 一つ増加して
つぎに
処理対象ハッシュの ハッシュキーワード(ワークカウンタ)へ ワークキーワードを 入れ
処理対象ハッシュの ハッシュ値(ワークカウンタ)へ ワーク値を 入れる。
ハッシュから得るとは (ハッシュ型、キーワード -> 値)
処理対象ハッシュは 構造体情報
ワークキーワードは 文字列
ワークカウンタは    変数
処理対象ハッシュと ワークキーワードへ 入れ
処理対象ハッシュと ワークキーワードで ハッシュ値を計算し ワークカウンタへ 入れ
ワークカウンタが ゼロ?
ならば     「!」を
さもなければ 処理対象ハッシュの ハッシュ値(ワークカウンタ)を 
つぎに
返す。
ハッシュ1レコード表示とは (文字列、文字列 ->・)
ワークキーワードは 文字列
ワーク値は 文字列
ワークキーワードと ワーク値に 入れ
ワークキーワードを ダブルクォート囲んで表示して ","を 表示し
ワーク値を ダブルクォート囲んで表示して 改行する。
ハッシュの内容を全部表示とは
処理対象ハッシュは 構造体情報
ワークカウンタは 変数
処理対象ハッシュに 入れ
「ハッシュカウンタ:」を 表示して
処理対象ハッシュの ハッシュカウンタを 数値表示して 改行し
処理対象ハッシュの ハッシュカウンタを ワークカウンタに 入れ
ワークカウンタを 一つ減少し
ワークカウンタで 回数指定して
処理対象ハッシュの ハッシュキーワード(回数)と
処理対象ハッシュの ハッシュ値(回数)で ハッシュ1レコード表示して
繰り返す。

コメント

  1. まとめ【【Mind】「型紙」の素】

    Mind v7よりC言語の構造体みたいな「型紙」がサポートされました。いままでの構造体は、型の定義とメモリ