2017-01-08 5 views
9

Мне нужно отсортировать массив массивов; метод .sort работает по умолчанию . Но каков хороший способ сортировки по различным показателям внутренних массивов ?perl6 Лучшие способы сортировки массива массивов?

массива для сортировки является Outter больше массива: (день рождения в формате «») ммддгга

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

@allRecords.sort by itself sorts by birthdays. 

Что такое лучший способ сортировки по ПгвЬЫату или LastName или данные внутри внутренних массивов?

спасибо!

ответ

9

sort способ takes a sub as optional argument. Если его arty равен 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] сделано – Christoph

+0

Очень круто !! Спасибо Кристоф и Брэд Гилберт !!! – lisprogtor

Смежные вопросы