2012-09-27 231 views
3

您好我有一个包含元素[daily,monthly,weekly][monthly,weekly,daily][weekly,daily]自定义列表排序

我需要列表以这样的方式那种

[daily,monthly,weekly] == [daily,monthly,weekly] 

[monthly, weekly, daily] == [daily, monthly, weekly] 

[weekly, daily] == [daily, weekly] 

能有人请帮我在这

列表
+0

你能不能给你有名单的例子吗?什么是“每日”?一个字符串?一个具有特定类的对象?很难看出您的意思......此外,这与Grails连接的方式是什么? –

+0

喜蒂姆这些只是字符串 – Siva

+0

很酷,然后我的答案应该工作 –

回答

5

假设你的意思是你有一个字符串列表,那么这应该工作:

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=['daily','monthly','weekly'] -> 
    order.indexOf(a) <=> order.indexOf(b) 
} 
+1

我喜欢它,尽管每次调用闭包时创建一个全新的'ArrayList'效率相当低。使用'def values = ['daily','weekly','monthly']创建一次; def customSorter = {values.indexOf(it)}'会更好。 –

+1

@IanRoberts好点..用默认参数给我的答案增加了第三个选项;-) –