Groovy 自定义列表排序
您好,我有一个列表,其中包含元素Groovy 自定义列表排序,groovy,Groovy,您好,我有一个列表,其中包含元素[每日、每月、每周]或[每月、每周、每日]或[每周、每日] 我需要对列表进行排序,以便 [daily,monthly,weekly] == [daily,monthly,weekly] [monthly, weekly, daily] == [daily, monthly, weekly] [weekly, daily] == [daily, weekly] 有人能帮我一下吗?假设你的意思是你有一个字符串列表,那么这应该可以: customSorter =
[每日、每月、每周]
或[每月、每周、每日]
或[每周、每日]
我需要对列表进行排序,以便
[daily,monthly,weekly] == [daily,monthly,weekly]
[monthly, weekly, daily] == [daily, monthly, weekly]
[weekly, daily] == [daily, weekly]
有人能帮我一下吗?假设你的意思是你有一个字符串列表,那么这应该可以:
customSorter = {
[ 'daily', 'monthly', 'weekly' ].indexOf( it )
}
assert [ 'daily', 'monthly', 'weekly' ].sort( customSorter ) == [ 'daily', 'monthly', 'weekly' ]
assert [ 'monthly', 'weekly', 'daily' ].sort( customSorter ) == [ 'daily', 'monthly', 'weekly' ]
assert [ 'weekly', 'daily' ].sort( customSorter ) == [ 'daily', 'weekly' ]
或者您可以这样做(以避免重复创建列表)
customSorter={a,b,order=[“每日”、“每月”、“每周”]->
订单。索引OF(a)订单。索引OF(b)
}
您能举例说明您的列表吗?什么是每日?一根绳子?具有特定类的对象?真的很难理解你的意思。。。另外,这与Grails有什么联系?嗨,Tim,这些只是stringsCool,那么我下面的答案应该可以,但我的问题是输入可能是每日(每周一次)的任意组合。所以我不能继续写所有的assert-right组合。assert是为了告诉你它是有效的。。。我不明白你的意思…我喜欢它,尽管每次调用闭包时创建一个全新的ArrayList
是相当低效的。使用def值=['daily'、'weekly'、'monthly']创建一次;def customSorter={values.indexOf(it)}
会更好。@IanRoberts很好的观点。。使用默认参数在我的答案中添加了第三个选项;-)
customSorter = { a, b, order=['daily','monthly','weekly'] ->
order.indexOf( a ) <=> order.indexOf( b )
}