2017-01-08 10 views
9

Potrzebuję posortować tablicę tablic; Metoda .sort działa domyślnie przez . Ale co to jest dobry sposób sortowania według różnych indeksów wewnętrznych tablic ?perl6 Najlepsze sposoby sortowania tablicy tablic?

array być klasyfikowane jest outter większy wachlarz: (urodziny w formacie „MMDDRR”)

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

@allRecords.sort by itself sorts by birthdays. 

Jaki jest lepszy sposób, aby posortować według firstName lub lastName lub danych wewnątrz wewnętrznych tablic?

Dziękuję bardzo!

Odpowiedz

9

Metoda sorttakes a sub as optional argument. Jeśli jego arytmetyczna wartość wynosi 1, wykorzystuje wartość zwracaną jako argumenty operacji porównania; jeśli jego wartość wynosi 2, można ręcznie dokonać porównania między elementami, ale można je dopasować, zwracając jeden z następujących: Less, Same lub More.

Biorąc swój przykład, możemy posortować według imienia tak:

@allRecords.sort(*.[1]); 

Możemy sortować według nazwisko, a następnie imię, następnie urodziny wykonując poszczególne porównań wyraźnie tak:

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

ponownie lub pośrednio poprzez przekształcenie wielkości:

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

przekształcając narodziny Wpis dni więc Według roku pierwszy pozostawiamy jako ćwiczenie dla czytelnika, ale jeden sposób to zrobić byłoby dodać coś jak

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

gdzie stosowne.

+4

Możesz sortować według nazwiska, imienia, a potem daty urodzin: '@ a.sort: * [2 ... 0]' –

+0

@BradGilbert: [x] zrobione – Christoph

+0

Bardzo fajne !! Dziękuję Christoph i Brad Gilbert !!! – lisprogtor

Powiązane problemy