私は次のような地図を持っています
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"]
ありがとう!
大文字と小文字を区別せずに並べ替えるには、
m.sort { it.value.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 }
ところで、これは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]
誰かがJenkinsパイプラインスクリプトで作業を行う方法を探している場合は、そのための_@NonCPS
_アノテーションを使用して別のメソッドを作成する必要があります。
_@NonCPS
def getSorted(def mapSizeMap){
mapSizeMap.sort(){ a, b -> b.value <=> a.value }
}
_
そして、パイプラインスクリプトからそれを呼び出します。
def sortedMapZoneMap = getSorted(mapZonesMap)
もちろん、「大文字と小文字を区別する」ロジックを上に適用することもできます。