float[float] aa = [2.2:7.7, 3.3:6.6, 1.1:4.4];
std.sort(aa);
assert(aa == [1.1:4.4, 2.2:7.7, 3.3:6.6]);
上記は機能しません。どのように適切にソートaa
しますか?
float[float] aa = [2.2:7.7, 3.3:6.6, 1.1:4.4];
std.sort(aa);
assert(aa == [1.1:4.4, 2.2:7.7, 3.3:6.6]);
上記は機能しません。どのように適切にソートaa
しますか?
D の組み込み連想配列はハッシュ テーブルです。それらはソートされておらず、ソートしても意味がありません。並べ替えが意味をなすのは、AA を反復処理するときだけであり、そのためには、AA を新しいコンテナーに入れる必要があります。だから、あなたは次のようなことができます
auto keys = aa.keys;
sort(keys);
ただし、AA 自体を並べ替えることはできません。ソートされたマップが必要な場合は、次のようなものを使用する必要がありますstd.container.RedBlackTree
-ただし、セットではなくマップとして機能させるには少し手間がかかります(たとえば、ソート関数はキーのみでソートする必要があり、渡すときに一部の関数に詰め込むには、ダミー値を持つタプルが必要です)。
これが、Java に aHashMap
と a がSortedMap
あり、C++ にunordered_map
(C++11) とがある理由map
です。どちらもマップですが、特にソートとルックアップ時間に関して、非常に異なる特性を持っています。
できません。意味がありません。
連想配列は、「辞書」または「マップ」とも呼ばれます。D の特定のバリエーションはハッシュテーブルです。それらは配列ではありません。それらを並べ替えると、検索時間を短縮する能力が損なわれます。
高速なルックアップ時間が必要な場合は、RedBlackTree
代わりに使用することを検討してください。