2017-01-08 13 views
9

배열 배열을 정렬해야합니다. .sort 메서드는 기본값 인 에 의해 작동하는 것으로 보입니다. 그러나 내부 배열 의 다른 인덱스로 정렬하는 좋은 방법은 무엇입니까?perl6 배열의 배열을 정렬하는 가장 좋은 방법은 무엇입니까?

my @allRecords = [ [birthday1 firstName1 lastName1 [data1] 
        [birthday2 firstName2 lastName2 [data2] 
        ... 
        [birthdayN firstNameN lastNameN [dataN] ]; 

@allRecords.sort by itself sorts by birthdays. 

firstName을 또는이 lastName 또는 내부 배열 내부의 데이터를 기준으로 정렬 할 수있는 더 좋은 방법은 무엇입니까 ('MMDDYY'형식의 생일) 정렬 할 수

배열 outter는 큰 배열을 무엇입니까?

대단히 감사합니다!

답변

9

sort 방법 takes a sub as optional argument. 해당 값이 1이면 반환 값을 비교 피연산자로 사용합니다. 요소가 2 인 경우 수동으로 요소 간 비교를 수행 할 수 있지만 Less, Same 또는 More 중 하나를 반환하면 적합합니다.

귀하의 예를 감안할 때, 우리는이 같은 이름으로 정렬 할 수 있습니다

@allRecords.sort(*.[1]); 
우리는 다음과 같이 명시 적으로 별도의 비교를 수행하여 다음 다음 성, 이름, 생일을 기준으로 정렬 할 수 있습니다

:

@allRecords.sort(-> $a, $b { 
    $a[2] cmp $b[2] || $a[1] cmp $b[1] || $a[0] cmp $b[0] 
}); 

또는 묵시적 피연산자 다시 바뀌는 기준 : 출생 변형

@allRecords.sort(*.[2...0]); 

을 하루 항목은 그래서 우리는 종류의 연도 별 첫 번째는 적절한

.comb(2).list.rotate(-1).join 

같은 것을 추가하는 것입니다 수행하는 독자를위한 운동, 그러나 하나의 방법으로 남아 있습니다.

+4

다음과 같이 성, 이름, 생일 순으로 정렬 할 수 있습니다.'@ a.sort : * [2 ... 0]' –

+0

@BradGilbert : [x] done – Christoph

+0

매우 멋지다 !! 크리스토프와 브래드 길버트 감사합니다! – lisprogtor