評価に基づいて食品にランキングを割り当てるための短いグルーヴィーなアルゴリズムがあります。これは、groovy コンソールで実行できます。コードは完全に機能しますが、コードを記述するためのより Groovy または機能的な方法があるかどうか疑問に思っています。可能であればローカル変数previousItem
とローカル変数を取り除くといいと思います。rank
def food = [
[name:'Chocolate Brownie',rating:5.5, rank:null],
[name:'Fudge', rating:2.1, rank:null],
[name:'Pizza',rating:3.4, rank:null],
[name:'Icecream', rating:2.1, rank:null],
[name:'Cabbage', rating:1.4, rank:null]]
food.sort { -it.rating }
def previousItem = food[0]
def rank = 1
previousItem.rank = rank
food.each { item ->
if (item.rating == previousItem.rating) {
item.rank = previousItem.rank
} else {
item.rank = rank
}
previousItem = item
rank++
}
assert food[0].rank == 1
assert food[1].rank == 2
assert food[2].rank == 3
assert food[3].rank == 3 // Note same rating = same rank
assert food[4].rank == 5 // Note, 4 skipped as we have two at rank 3
提案?