Hash Tablolarını Sıralama


Diyelim ki şöyle basit bir karma tablonuz var:

$hash = @{
Name="Jeff"
Size = 123
Color = "Green"
Computer = "Yoga2Pro"
}

Ve şu şekilde görüntülenir:

PS C:\scripts> $hash

Name                           Value
----                           -----
Color                          Green
Name                           Jeff
Computer                       Yoga2Pro
Size                           123

Anahtarları sıralamak için her karma tablo nesnesinin parçası olan GetEnumerator() yöntemini kullanabilirsiniz. Bu yöntem, karma tablosundaki her öğe için System.Collections.DictionaryEntry nesnesi oluşturur.

PS C:\scripts> $hash.GetEnumerator()  | get-member


   TypeName: System.Collections.DictionaryEntry

Name        MemberType    Definition
----        ----------    ----------
Name        AliasProperty Name = Key
Equals      Method        bool Equals(System.Object obj)
GetHashCode Method        int GetHashCode()
GetType     Method        type GetType()
ToString    Method        string ToString()
Key         Property      System.Object Key {get;set;}
Value       Property      System.Object Value {get;set;}

Bu, herhangi bir özelliğe göre sıralama yapabileceğiniz anlamına gelir.

PS C:\scripts> $hash.GetEnumerator() | sort key

Name                           Value
----                           -----
Color                          Green
Computer                       Yoga2Pro
Name                           Jeff
Size                           123


PS C:\scripts> $hash.GetEnumerator() | sort value

Name                           Value
----                           -----
Size                           123
Color                          Green
Name                           Jeff
Computer                       Yoga2Pro

Bu arada, PowerShell 3.0'dan itibaren karma tablosunu "sıralı" olarak tanımlayarak "önceden sıralayabilirsiniz".

$hash = [ordered]@{
Name="Jeff"
Computer = "Yoga2Pro"
Color = "Green"
Size = 123
}

Artık karma tablosu her zaman girişleri tanımladığınız sıraya göre sıralanacaktır.

PS C:\scripts> $hash

Name                           Value
----                           -----
Name                           Jeff
Computer                       Yoga2Pro
Color                          Green
Size                           123

Yine de sıralamak istiyorsanız yine de yapabilirsiniz.

PS C:\scripts> $hash.GetEnumerator() | sort name -Descending

Name                           Value
----                           -----
Size                           123
Name                           Jeff
Computer                       Yoga2Pro
Color                          Green

Harika bir hafta geçirmenizi dilerim, umarım her şey yoluna girer.

İlgili makaleler