20

私は次のような地図を持っています

m=[
     "james":"silly boy",
     "janny":"Crazy girl",
     "jimmy":"funny man",
     "georges":"massive fella"
];

このマップを値で並べ替えたいのですが、大文字と小文字は区別されません(これが、カスタム並べ替えが必要な理由です)。したがって、クロージャを使用してカスタムソートを実装する必要があると考えました。しかし、私はGroovyを初めて使用し、この非常に単純なタスクを実行するのに苦労しています。

望ましい結果は次のようになります。

["janny":"Crazy girl", "jimmy":"funny man", "georges":"massive fella", "james":"silly boy"]

ありがとう !

4

4 に答える 4

43

大文字と小文字を区別しないで並べ替えるには、次を使用します

m.sort { it.value.toLowerCase() }
于 2012-12-03T15:58:57.400 に答える
12

値で並べ替えたいと仮定すると、次のことができます。

Map m =[ james  :"silly boy",
         janny  :"Crazy girl",
         jimmy  :"funny man",
         georges:"massive fella" ]

Map sorted = m.sort { a, b -> a.value <=> b.value }
于 2012-12-03T15:47:22.643 に答える
5

ところで、toLowerCase() を使用する場合と使用しない場合で異なる並べ替えを示すコードを次に示します。

Map m =[ james  :"silly boy",
         janny  :"crazy girl",
         jimmy  :"Funny man",
         georges:"massive fella" ]
Map sorted = m.sort { a, b -> a.value <=> b.value }
println sorted
sorted = m.sort { a, b -> a.value.toLowerCase() <=> b.value.toLowerCase() }
println sorted

そして印刷します:

[jimmy:Funny man, janny:crazy girl, georges:massive fella, james:silly boy]
[janny:crazy girl, jimmy:Funny man, georges:massive fella, james:silly boy]
于 2014-11-26T08:22:14.863 に答える