Groovy 按值大小排序()
我需要按Groovy 按值大小排序(),groovy,Groovy,我需要按sourcevalue size()降序排序: def source = [(firstString): [3, 2, 1], (secondString): [3, 2, 1, 4], (thirdString): [3]] expected: [(secondString): [3, 2, 1, 4], (firstString): [3, 2, 1], (thirdString): [3]] 我尝试过这样做: source.sort { -it.value.size()
source
value size()降序排序:
def source =
[(firstString): [3, 2, 1],
(secondString): [3, 2, 1, 4],
(thirdString): [3]]
expected:
[(secondString): [3, 2, 1, 4],
(firstString): [3, 2, 1],
(thirdString): [3]]
我尝试过这样做:
source.sort { -it.value.size() }
如何实现这一点?以下是实现预期结果的工作代码:
def source = [
"(firstString)": [3, 2, 1],
"(secondString)": [3, 2, 1, 4],
"(thirdString)": [3]
]
def sortedResult = source.sort { -it.value.size()}
println sortedResult
groovy控制台上的工作示例:以下是预期结果的工作代码:
def source = [
"(firstString)": [3, 2, 1],
"(secondString)": [3, 2, 1, 4],
"(thirdString)": [3]
]
def sortedResult = source.sort { -it.value.size()}
println sortedResult
groovy控制台上的工作示例:将闭包作为参数的排序不会改变原始映射。它只返回一个新映射,因此您需要分配它(您可以将其分配给自身) 对于,还有另一种排序类型,它接受布尔值和闭包。在本例中,布尔值指示您是要更改原始集合还是只返回新集合
a = [1,3,2]
a.sort (true) { it }
assert a = [1,2,3]
这不适用于任何人。因此,请使用上面的赋值语法。将闭包作为参数的排序不会改变原始映射。它只返回一个新映射,因此您需要分配它(您可以将其分配给自身) 对于,还有另一种排序类型,它接受布尔值和闭包。在本例中,布尔值指示您是要更改原始集合还是只返回新集合
a = [1,3,2]
a.sort (true) { it }
assert a = [1,2,3]
这不适用于任何人。因此,请使用上面的赋值语法。如果要比较排序列表是否与预期列表匹配,请执行
expected==source.sort{-it.value.size()}
而不是expected=expected.sort{-it.value.size()}
。您在示例中对预期列表进行排序,并使用赋值运算符而不是相等。@Szymonstephank,我已经编辑了这个问题。我需要按值大小对源代码进行排序。像我尝试的那样分类,根本不起作用。我得到了相同的结果:/Butsource.sort{-it.value.size()}==expected
。您粘贴的排序代码已经创建了一个排序列表,如[secondString:[3,2,1,4],firstString:[3,2,1],thirdString:[3]]
。在这里,我得到了一个无序列表,好像source
从未排序过一样。source.sort{-it.value.size()}
创建了一个新的排序列表,它不会改变您调用排序的列表。这就是为什么source.sort{-it.value.size()}
的结果等于expected
:source.sort{-it.value.size()}==expected
如果要比较排序列表是否与预期列表匹配,请改为expected==source.sort{-it.value.size()
。您在示例中对预期列表进行排序,并使用赋值运算符而不是相等。@Szymonstephank,我已经编辑了这个问题。我需要按值大小对源代码进行排序。像我尝试的那样分类,根本不起作用。我得到了相同的结果:/Butsource.sort{-it.value.size()}==expected
。您粘贴的排序代码已经创建了一个排序列表,如[secondString:[3,2,1,4],firstString:[3,2,1],thirdString:[3]]
。在这里,我得到了一个无序列表,好像source
从未排序过一样。source.sort{-it.value.size()}
创建了一个新的排序列表,它不会改变您调用排序的列表。这就是为什么source.sort{-it.value.size()}
的结果等于expected
:source.sort{-it.value.size()}==expected
就是这样!工作如期进行。谢谢你,杰里米,就这样!工作如期进行。谢谢你,@JeremyHunt也工作得很好!谢谢你,尼廷!工作也很好!谢谢你,尼廷!