2016-10-16 9 views

答えて

2

多くのハッシュマップの実装と同様に、Clojure's hashed mapsはエントリを並べ替えず、挿入された順序を保持しません。これにより、より良いパフォーマンスが可能になります。

conjには、一般的な順序付けのセマンティクス(ベクトルなどのいくつかの具体的な型の順序付けセマンティクス)もありません。

+3

Conjにはコンクリート型のセマンティクスがあります。言い換えれば、それは多相関数です。 –

+0

[sorted-map](https://clojuredocs.org/clojure.core/sorted-map)は、キーでエントリを並べ替えるクロージャマップです。 – Mars

+1

この多型はどこからも出てこないことに注意してください。これは、順序付けられるハッシュマップの目的ではありません。その目的は、別の意味を持つ値からアクセスすることです。 「参加」操作を実行する。注文は関係ありません。そうでなければ、ベクトルまたはソートマップがあります。 –

0

あなたは、マップはconjから一貫性のない動作を取得する限り行く必要はありません。

(conj [1] 2) ; [1 2]  
(conj (list 1) 2) ; (2 1) 

ハッシュマップは何のためを定義しています。しかし、いずれのマップのために、エントリの

  • seqは常にvalskeysが一貫順になります
  • 同じになります。

したがって、マップm

現在
(= (keys m) (map key m)) 
(= (vals m) (map val m)) 
(= m (zipmap (keys m) (vals m))) 

のために、このシーケンスは、挿入順序に依存しないように思えます。ランダムな整数を無作為に入れ替えて、これをテストしました。

関連する問題