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 AshiqKarma tabloları oluşturmayı bitirdikten sonra, $arrayOfHashTables'a . Alternatif olarak, karma tabloları dizisine aşağıdaki gibi karma tabloları eklemek için $hashTable1 ve $hashTable2 eklemek için += operatörünü kullanırız + 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
.ps1dosyası oluşturun, diyelim kiTest.ps1. - Bir karma tablo dizisini parametre olarak kabul etmek için
parambloğunu kullanın. - Özelleştirilmiş mesajları görüntülemek için
Write-Hostcmdlet'ini kullanın. - Bir karma tablo dizisi üzerinde yineleme yapmak için
foreachdöngüsünü kullanın. - Her karma tablo girişi üzerinde yineleme yapmak için iç içe
foreachyönteminiGetEnumerator()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ğerbiçiminde yazmak içinWrite-Hostcmdlet'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 cmdlet'i.anahtar=değer yazmak için GetEnumerator() yöntemiyle iç içe geçmiş bir foreach kullandık
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.
