2012-11-21 4 views
1

배열 목록을 정렬하려고합니다.그루비에서 목록을 정렬하는 방법

예. 종류에

def list = [1, 1, 4, 4, 3, 4, 1] 

희망 :

[1, 1, 1, 4, 4, 4, 3] 

가 대단히 감사합니다.


난 내 코드

예를 들어, 사용 해요.

def plnProcessGoalInstance = ......someting  
def order = plnProcessGoalInstance.plnGoal.plnTargetPlan.id.unique() //[1, 4, 3,] ,plnProcessGoalInstance.plnGoal.plnTargetPlan.id = [1, 1, 4, 4, 3, 4, 1] 
def plnProcessGoalInstance = plnProcessGoalInstance.sort{ a, b -> 
      order.indexOf(a.plnGoal.plnTargetPlan.id) <=> order.indexOf(b.plnGoal.plnTargetPlan.id)} 

도움 주셔서 감사합니다.

+4

끝에 3을 입력하고 싶습니까? 당신의 정렬이 어떻게 작동하는지 설명 할 수 있습니까? –

+1

다음을 기준으로 정렬하려는 것으로 보입니다. A. 특정 숫자 발생 (내림차순) B. 번호 (오름차순) – Deruijter

+0

[1,2,3,4,1] -> [1,1,2,3, 4] [1,4,3,2,1] -> [1,1,4,3,2] 같은 그룹입니다. –

답변

2

방법에 대해 :

def order = [ 1, 4, 3 ] 
def list = [ 1, 1, 4, 4, 3, 4, 1 ] 

list.sort { a, b -> order.indexOf(a) <=> order.indexOf(b) } 

assert list == [1, 1, 1, 4, 4, 4, 3] 

또는 Deruijter에 의한 코멘트가 올바로 작동하고 사용자가 같은 주파수를 가진 사람들을 위해 수에 의해 다음 주파수를 내림차순으로 정렬 할 가정 :

def list = [ 1, 1, 4, 4, 3, 4, 1 ] 
def order = list.countBy { it } 
       .sort { a, b -> 
        b.value <=> a.value ?: a.key <=> b.key 
       }.keySet().toList() 
list.sort { a, b -> order.indexOf(a) <=> order.indexOf(b) } 

countBy Groovy가 필요합니다.

관련 문제