2012-11-16 23 views
16

groovyでソートされたマップを使用することに興味があります(グレムリンはグラフデータベースのDSLです)。groovyでソートされたマップ

こちらのソートマップでblog postを見ましたが、まだ混乱しています。

  • ソートマップはどのように宣言されていますか?それはマップの標準的な方法とは何か異なりますかy = [:]

  • ソートされたマップを使用する場合、リストに挿入されたアイテムは、挿入された順序で並べられますか?またはソートされたマップの項目がソートされる前にsort{}を実行しなければなりませんか?

答えて

37

あなたがちょうどそうのようなマップを宣言する場合:あなたはそれが言うdocumentation for LinkedHashMapを見れば次に

def m = [:] 

を、あなたは、デフォルトではGroovyの見ることができますがLinkedHashMap

assert m.getClass().name == 'java.util.LinkedHashMap' 

になります:

ハッシュテーブルとリンク予測可能な反復順序を使用して、Mapインタフェースの実装をリストします。この実装は、すべてのエントリを実行する二重リンクリストを維持するという点でHashMapとは異なります。このリンクリストは、通常、キーがマップに挿入された順序(挿入順序)である反復順序を定義します。

のでLinkedHashMapは順序があり、あなたは、キーの自然順序付けをしたい場合は、あなたがJavaのソートされたマップのいずれかを使用することができますsort

def m = [ b:1, a:2 ] 

// Sort by descending value 
m = m.sort { -it.value } 

println m // prints [a:2, b:1] 

を呼び出すことによって、Groovyでその順序に影響を与えることができ、そのようあなたはGroovyでこれを使用したいと言って

TreeMapとして、あなたが行うことができます:

// def tm = [ tim_yates:1, F21:2 ] as TreeMap // works as well 
TreeMap tm = [ tim_yates:1, F21:2 ] 

そして、これを印刷し、あなたはそれがキーによって順序付けされて見ることができます:あなたは、キーを追加すると

println map // prints [F21:b, tim_yates:a] 

TreeMapは秩序を維持します。 LinkedHashMapは、新しい値を追加すると自動的にソートされません。

関連する問題