3
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しますか?

4

2 に答える 2

7

D の組み込み連想配列はハッシュ テーブルです。それらはソートされておらず、ソートしても意味がありません。並べ替えが意味をなすのは、AA を反復処理するときだけであり、そのためには、AA を新しいコンテナーに入れる必要があります。だから、あなたは次のようなことができます

auto keys = aa.keys;
sort(keys);

ただし、AA 自体を並べ替えることはできません。ソートされたマップが必要な場合は、次のようなものを使用する必要がありますstd.container.RedBlackTree-ただし、セットではなくマップとして機能させるには少し手間がかかります(たとえば、ソート関数はキーのみでソートする必要があり、渡すときに一部の関数に詰め込むには、ダミー値を持つタプルが必要です)。

これが、Java に aHashMapと a がSortedMapあり、C++ にunordered_map(C++11) とがある理由mapです。どちらもマップですが、特にソートとルックアップ時間に関して、非常に異なる特性を持っています。

于 2012-04-08T06:12:56.253 に答える
6

できません。意味がありません。

連想配列は、「辞書」または「マップ」とも呼ばれます。D の特定のバリエーションはハッシュテーブルです。それらは配列ではありません。それらを並べ替える、検索時間を短縮する能力が損なわれます。

高速なルックアップ時間が必要な場合は、RedBlackTree代わりに使用することを検討してください。

于 2012-04-08T05:36:50.793 に答える