連想配列
すっかりその存在を忘れていた連想配列を触ってみた。
import std.c.stdio; void main(){ int[char[]] h; h["hoge"] = 3; h.write(); h.zero("hoge"); h.write(); h["huga"] = 5; h.write(); h.remove("hoge"); h.write(); h["hige"] = 6; h["foo"] = 1; h["bar"] = 2; char[][] ac; ac = h.keys; int[] ai; ai = h.values; for (int i = 0; i < h.length; i++){ printf("%.*s %d ", ac[i], ai[i]); } } void zero(inout int[char[]] h, char[] c){ int* p = (c in h); if (p != null){ h[c] = 0; } } void write(int[char[]] h){ foreach (char[] c, int i; h){ printf("%.*s : %d ", c, i); } printf("\n"); }
hoge : 3 hoge : 0 hoge : 0 huga : 5 huga : 5 bar 2 huga 5 hige 6 foo 1
配列同様、関数の第一引数を連想配列にしてやることで、連想配列のメソッドのように使えます。undocumented!
removeで普通に取り除ける。某STLみたいな謎挙動はない。
keysとvaluesプロパティでkeyとvalueの動的配列…要素の順番は当然追加順でもなんでもない。
スクリプト言語っぽいなあ。
それにしてもひどいコードですね…
追記。in式なんてものが。