PowerShell - HashTable Dizisi


Bir HashTable Dizisi Oluşturma

PowerShell'de bir karma tablo dizisi oluşturmak için:

  • Bir dizi oluşturun.
  • İki veya daha fazla karma tablosu oluşturun.
  • Karma tablolarını (ikinci adımda oluşturulan) bir diziye (ilk adımda oluşturulan) eklemek için += operatörünü kullanın.

Bir Karma Tablo Dizisi Oluşturun:

$arrayOfHashTables = @()

$hashTable1 = [ordered]@{
                "firstName" = "Mehvish"
                "lastName" = "Ashiq"
                department="Computer Science"
             }
$hashTable2 = [ordered]@{
                "firstName" = "Tahir"
                "Raza" = "Ashiq"
                department="Designs & Arts"
             }

$arrayOfHashTables += $hashTable1
$arrayOfHashTables += $hashTable2

$arrayOfHashTables

ÇIKTI:

Name                  Value
----                  -----
firstName             Mehvish
lastName              Ashiq
department            Computer Science
firstName             Tahir
Raza                  Ashiq
department            Designs & Arts

Öncelikle bir dizi oluşturmak için @() ile temsil edilen bir dizi operatörü kullandık ve bunu $arrayOfHashTables değişkenine kaydettik. Daha sonra $hashTable1 ve $hashTable2'de saklanan iki karma tablosu oluşturduk; her biri @{ etrafına sarılmış anahtar/değer çiftleri içeriyordu. İsteğe bağlı olarak, anahtar/değer çiftlerinin karma tabloları oluştururken eklendikleri sırayla olmasını sağlamak için [ordered] komutunu kullanabiliriz. Eğer [ordered] kullanmayacaksak hash tablolarının dizisi aşağıdaki gibi görünecektir.

ÇIKTI:

Name               Value
----               -----
department         Computer Science
firstName          Mehvish
lastName           Ashiq
department         Designs & Arts
firstName          Tahir
Raza               Ashiq

Karma tabloları oluşturmayı bitirdikten sonra, $arrayOfHashTables'a $hashTable1 ve $hashTable2 eklemek için += operatörünü kullanırız . Alternatif olarak, karma tabloları dizisine aşağıdaki gibi karma tabloları eklemek için + operatörünü de kullanabilirsiniz:

+ Operatör'ü kullanın:

$arrayOfHashTables = @()

$hashTable1 = [ordered]@{
                "firstName" = "Mehvish"
                "lastName" = "Ashiq"
                department="Computer Science"
             }
$hashTable2 = [ordered]@{
                "firstName" = "Tahir"
                "Raza" = "Ashiq"
                department="Designs & Arts"
             }

$arrayOfHashTables = $arrayOfHashTables + $hashTable1
$arrayOfHashTables = $arrayOfHashTables + $hashTable2

İki karma tablosu oluşturduk ($hashTable1 ve $hashTable2); peki ya 10 ya da 15 tane daha eklemek zorunda kalırsak? Şimdi ne olacak? Kod yedekliliğine yol açacaktır. Bunu önlemek için bunu Test.ps1 adlı bir komut dosyasına yazacağız ve bir veya daha fazla karma tablosunu parametre olarak ileteceğiz. Nasıl yapılır? Bunu aşağıdaki bölümde öğrenelim.

Bir Parametreden HashTable Dizisine Veri Aktarma

Verileri bir parametreden karma tablo dizisine aktarmak için:

  • Bir .ps1 dosyası oluşturun, diyelim ki Test.ps1.
  • Bir karma tablo dizisini parametre olarak kabul etmek için param bloğunu kullanın.
  • Özelleştirilmiş mesajları görüntülemek için Write-Host cmdlet'ini kullanın.
  • Bir karma tablo dizisi üzerinde yineleme yapmak için foreach döngüsünü kullanın.
  • Her karma tablo girişi üzerinde yineleme yapmak için iç içe foreach yöntemini GetEnumerator() yöntemiyle birlikte kullanın.
  • Yukarıdaki döngünün iç içe geçmiş her yinelemesi için, anahtarı ve değerini anahtar=değer biçiminde yazmak için Write-Host cmdlet'ini kullanın.

Test.ps1 Komut Dosyası Parametreden HashTable Dizisine Veri Alma:

param(
    [hashtable[]]$Hashtables
)

Write-Host "Hashtables: @("

foreach($hashtable in $Hashtables){
    Write-Host "  @{"
    foreach($entry in $hashtable.GetEnumerator()){
        Write-Host "    " $entry.Key = $entry.Value
    } 
    Write-Host "  }"
}

Write-Host ")"

Bu Komutu Kullanarak Yukarıdaki Komut Dosyasını Çalıştırın:

.\Test.ps1 -Hashtables @{ firstName = "Aftab"; lastName = "Raza"; department = "Game Development"},@{ firstName = "Azher"; lastName = "Raza"; department = "Mathematics"}

ÇIKTI:

Hashtables: @(
  @{
     department = Game Development
     firstName = Aftab
     lastName = Raza
  }
  @{
     department = Mathematics
     firstName = Azher
     lastName = Raza
  }
)

Öncelikle param bloğunu param anahtar sözcüğüyle birlikte kullandık ve ardından parantezleri açıp kapattık (()); bu blok bir veya daha fazla parametreyi kabul eder. Bunu bir karma tablo dizisini parametre olarak almak için kullandık.

Önemli olan, bu betiğin parametre olarak yalnızca bir karma tablo dizisini almasını nasıl sağlayabileceğimizdir. Parametreye bir type atayabilir ve bir [Parameter()] bloğu ekleyebiliriz. Aşağıdaki örnekte, yalnızca hashtable[] türündeki karma tablolardan oluşan bir diziyi kabul eden bir parametre görebiliriz.

Parametre Türünü Belirtin:

param(
    [Parameter()]
    [hashtable[]]$Hashtables
)

Ana bilgisayara özelleştirilmiş çıktı/mesaj yazmak için yukarıda sağlanan komut dosyasında (Test.ps1) farklı yerlerde Write-Host cmdlet'ini kullandık; burada ana bilgisayar PowerShell konsolumuz veya terminalimizdir.

Daha sonra, bir karma tablo dizisi ($Hashtables) üzerinde yineleme yapmak için bir foreach döngüsü kullanıldı. Her yinelemede, karma tablosunun her girişi üzerinde döngü oluşturmak ve Write-Host kullanarak anahtar=değer yazmak için GetEnumerator() yöntemiyle iç içe geçmiş bir foreach kullandık cmdlet'i.

GetEnumartor() yönteminin rolü nedir? Bu yöntem, bizim durumumuzda bir karma tablosu olan belirtilen koleksiyon boyunca yinelemek için kullandığımız bir numaralandırıcıyı (bir IEnumerator nesnesi) elde etmek için kullanıldı.

Bunların hepsi PowerShell'deki HashTable dizisiyle ilgili.

İlgili makaleler