myNotlar Logo

Çok boyutlu Array dizilerinin isteğe göre sıralanması


Bu örnek, çok boyutlu dizilerin alt dizilerindeki değerlerin isteğe bağlı karşılaştırılarak sıralanması göstermektedir.

Bir dizinin (Array) çok boyutlu olması, genel olarak her elemanında farklı birer Array içerdiği anlamına gelmektedir.

Normal şartlarda bir dizi (Array) sıralanmak istendiğin de kullanılacak yöntem Array.sort() metodu olacaktır. Tek boyutlu ve bazı çok boyutlu diziler için kesin çözümün bu olmasına rağmen, dizi elemanlarının birbirlerinden farklı birer dizi olduğu durumlar da sort() metodunun bilinen abecesel yöntemi her zaman işe yaramayabilir. Bu durum da çözüm sort(fonksiyonAdi) metodu olacaktır. sort() bu şekliyle, karşılaştıracağı elemanların/nesnelerin göreceli olan büyüklük ve küçüklüklerinin belirlenmesine imkan sağlar.

Karşılaştırma fonksiyonunun tanımlanması ve sort() metoduna parametre olarak aktarılması aşağıdaki gibidir.

function karsilastir(elemanA, elemanB)
{
   // karşılaştırma işlemleri
}

Array.sort(karsilastir);

İki parametre aktarılan karşılaştırma fonksiyonu, elemanA'nın elemanB'den büyük olması durumunda pozitif bir değer (örn. +1), küçük olması durumunda negatif bir değer (örn. -1) ve eşit olması durumunda '0' (sıfır) değerini döndürmelidir. Bu dönüş değerleri sıralamanın küçükten büyüğe doğru olmasını sağlayacaktır. Aksi, yani büyükten küçüğe doğru sıralama istendiğin de ayrı bir fonksiyon tanımlanarak pozitif ve negatif değerler yer değiştirmelidir. İki farklı karşılaştırma fonksiyonunun tanımlanması Nesne İçeren Array Dizilerinin Sıralanması konusunda gösterilmektedir.

Aşağıdaki örnek, içinde dört farklı Array dizisi bulunan bir Array dizisinin, sort() metoduna karşılaştırma fonksiyonunu parametre olarak aktararak, küçükten büyüğe doğru alfabetik olarak sıralanmasını göstermektedir.

<script type="text/javascript">
function karsilastir(A, B)
{
    // Alt dizinin ilk elemanlarının birbirlerinden küçük veya büyük 
    // olup-olmadıkları kontrol ediliyor. Değilse, birbirlerine 
    // eşitlerdir ve sonraki sıraya geçiliyor.
    
    if( A[0] < B[0] ) return -1;
    if( A[0] > B[0] ) return 1;
    
    if( A[1] < B[1] ) return -1;
    if( A[1] > B[1] ) return 1;
    
    return 0; // İki dizide birbirlerine eşittir.
}

// Dizi elemanlarını sayfaya yazdırır.
function DiziyiGoster(ArrayDizi)
{
    for(i = 0; i < ArrayDizi.length; i++)
    {
        document.write( (i+1) + " : <b style='color:navy;'>" + 
            ArrayDizi[i].join(" - ") + "</b><br/>" );
    }
}

var Dizi = new Array();

Dizi[0] = new Array(2, 2);
Dizi[1] = new Array(2, 1);
Dizi[2] = new Array(1, 2);
Dizi[3] = new Array(1, 1);

    document.writeln("Dizinin normal sırası : " + "<br/>" );
    DiziyiGoster(Dizi);    
    
    Dizi.sort(karsilastir);
    document.write("<hr/>");
    
    document.writeln("Dizinin sıralı hali : " + "<br/>" );
    DiziyiGoster(Dizi);    
</script>
Canlı Sonuç
İlgili Başlıklar
 
myNotlar Hakkında
Telif Hakkı © 2007-2009 mynotlar.com Tüm Hakları Saklıdır. Kopyalanamaz. Yayınlanamaz.
E-Posta : support@myNotlar.com

| Tek Kişilik Oyunlar | Sudoku | YasinKa |