如何在jenkins groovy中使用values属性对数组进行排序

问题描述 投票:0回答:1

无法对以下数组进行排序 列出了尝试过的解决方案。 最初我们将有列表,通过在另一个列表中查找位置来创建新列表

def mylist=[]
def mylistData=[:]
mylistData.id="61628d82a174599d7ae7c61bf6d216f22d5139da"
mylist.add(mylistData)
                    
mylistData=[:]
mylistData.id="0cc18d6d3c93240ab93457063b4974a1270104c0"
mylist.add(mylistData)

mylistData=[:]
mylistData.id="bb007a1c9f594b55662a5b36d5f5b1a7651f3b0f"
mylist.add(mylistData)

mylistData=[:]
mylistData.id="087e7538583ee261944b66491391947d3a002380"
mylist.add(mylistData)

mylistData=[:]
mylistData.id="587ee2b1482509e12d5657bc55db70c9b482eddd"
mylist.add(mylistData)
def list=[]
//linesList=["587ee2b1482509e12d5657bc55db70c9b482eddd"] //contains 50 such values
for(item in mylist){
    item.pos=linesList.findIndexOf { it == item.id }.toInteger()
    list.add(item)
}
list.sort{ it.pos }
println list // list is not sorted
println list.sort{ it.pos }    // list is not sorted

预期结果:

[{id=587ee2b1482509e12d5657bc55db70c9b482eddd, pos=0},{id=bb007a1c9f594b55662a5b36d5f5b1a7651f3b0f, pos=19},  {id=087e7538583ee261944b66491391947d3a002380, pos=37},
{id=61628d82a174599d7ae7c61bf6d216f22d5139da, pos=45},{id=0cc18d6d3c93240ab93457063b4974a1270104c0, pos=54}]

实际

[{id=61628d82a174599d7ae7c61bf6d216f22d5139da, pos=45}, {id=0cc18d6d3c93240ab93457063b4974a1270104c0, pos=54}, {id=bb007a1c9f594b55662a5b36d5f5b1a7651f3b0f, pos=19}, {id=087e7538583ee261944b66491391947d3a002380, pos=37}, {id=587ee2b1482509e12d5657bc55db70c9b482eddd, pos=0}]

尝试过的解决方案

 list.sort{ it.pos }

注意:我在詹金斯内部运行时遇到这个问题

groovy jenkins-groovy
1个回答
0
投票

这是一个CPS神器,参见这里。为了使排序工作,您需要将其放入 NonCPS 带注释的方法中:

...
println list // list is not sorted
sortByPos(list)
println list // list is sorted

@NonCPS
def sortByPos(l) {
    l.sort { it.pos }
}

哦,groovy 中的列表已就地排序。

© www.soinside.com 2019 - 2024. All rights reserved.