「キーだけのマップ」であるかのように記述したが、実際には「値だけのマップ」。数値をそのまま格納することは可能だ。メモリー的な効率は高いだろう。当たるうまいメソッドがない。これは「データベースに問い合わせるたびに、既存かどうか、端から1個ずつ要素を調べること」に当たり、速いわけがない。あるが、仕様書を見る限り速くない。やるなら、配列をソートしてバイナリーサーチだろう。呼んでソートし直すわけにはいかない。既存だとすれば、配列のどこにあるか」をバイナリーサーチで調べ、その位置に実際その数があれば「既存である」と却下し、その数がなければ「新規なので受け付けます」と、その位置に挿入すればいい。この方式を仮に「自己ソート配列」と呼んでおく。問題は「新規なので受け付けます」というとき、ソートされた位置(配列のど真ん中)にどうやって要素を挿入するのか、という点だ。memmove、運が悪ければ配列全体の再確保が起きると予想される。要素数が1万や10万単位、場合によっては100万単位になる配列では、とてもスケールしないだろう。チューンで減らせるが、そこは本題ではない)。プッシュ...とした場合、テスト環境において全体の実行時間が5秒以上だった。「自己ソート配列」を使うと、実行時間が1.1秒になった。呼び出しを避けると、0.8秒台にできた。プロパティーをマップ風に使った場合(本文と同じ方法)、同じことが0.1秒未満でできる。