2017-01-08 13 views
9

Diziler dizisini sıralamalıyım; .sort yöntemi varsayılan olarak tarafından çalışıyor gibi görünüyor. Fakat iç dizilerindeki farklı indekslere göre sıralama yapmak için iyi bir yol nedir?perl6 Dizileri sıralamak için en iyi yollar?

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

@allRecords.sort by itself sorts by birthdays. 

firstName veya velastName tarafından veya iç diziler içindeki verilere göre sıralamak için daha iyi bir yolu nedir ('mmddyy' biçiminde doğum): sıralanmasını

dizi outter büyük dizi nedir?

Çok teşekkür ederim!

cevap

9

sort metodu takes a sub as optional argument. Aritesi 1 ise, karşılaştırma işlenenleri olarak dönüş değerini kullanır; eğer onun ifadesi 2 ise, el ile öğeler arasında karşılaştırma yapabilirsin, ancak Less, Same veya More'dan birini döndürerek uygun görüyorsun.

seni örnek göz önüne alındığında, böyle ilk adıyla sıralayabilirsiniz:

@allRecords.sort(*.[1]); 
Böyle açıkça ayrı karşılaştırmalar yaparak daha sonra soyadı, ad, doğum günü ile sıralayabilir

:

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

veya yeniden örtük işlenenlerini dönüştürerek: doğum dönüşüm

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

gün giriş yüzden sıralama yılın ilk nerede uygun

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

gibi bir şey eklemek olacaktır yapmak için bir okuyucu için egzersiz, ama bir yolu olarak bırakılır.

+4

Soyadı, sonra adı, sonra da bu şekilde doğum tarihine göre sıralayabilirsiniz: '@ a.sort: * [2 ... 0]' –

+0

@BradGilbert: [x] bitti – Christoph

+0

Çok güzel !! Teşekkür ederim Christoph ve Brad Gilbert! – lisprogtor

İlgili konular