PowerShell - อาร์เรย์ของ HashTables
การสร้างอาร์เรย์ของ HashTables
วิธีสร้างอาร์เรย์ของแฮชเทเบิลใน PowerShell:
- สร้างอาร์เรย์
- สร้างตารางแฮชตั้งแต่สองตารางขึ้นไป
- ใช้ตัวดำเนินการ
+=เพื่อเพิ่มตารางแฮช (สร้างขึ้นในขั้นตอนที่ 2) ให้กับอาร์เรย์ (สร้างขึ้นในขั้นตอนแรก)
สร้างอาร์เรย์ของตารางแฮช:
$arrayOfHashTables = @()
$hashTable1 = [ordered]@{
"firstName" = "Mehvish"
"lastName" = "Ashiq"
department="Computer Science"
}
$hashTable2 = [ordered]@{
"firstName" = "Tahir"
"Raza" = "Ashiq"
department="Designs & Arts"
}
$arrayOfHashTables += $hashTable1
$arrayOfHashTables += $hashTable2
$arrayOfHashTablesเอาท์พุท :
Name Value
---- -----
firstName Mehvish
lastName Ashiq
department Computer Science
firstName Tahir
Raza Ashiq
department Designs & Artsขั้นแรก เราใช้ตัวดำเนินการอาร์เรย์ที่แสดงด้วย @() เพื่อสร้างอาร์เรย์และบันทึกไว้ในตัวแปร $arrayOfHashTables ต่อไป เราสร้างตารางแฮชสองตารางที่เก็บไว้ใน $hashTable1 และ $hashTable2; แต่ละคู่มีคู่คีย์-ค่าล้อมรอบ @{} อีกทางหนึ่ง เราสามารถใช้ [ordered] เพื่อให้คู่คีย์-ค่าอยู่ในลำดับเดียวกับที่แทรกไว้ขณะสร้างตารางแฮช อาร์เรย์ของตารางแฮชจะมีลักษณะดังนี้ถ้าเราไม่ใช้ [ordered]
เอาท์พุท :
Name Value
---- -----
department Computer Science
firstName Mehvish
lastName Ashiq
department Designs & Arts
firstName Tahir
Raza Ashiqเมื่อเราสร้างตารางแฮชเสร็จแล้ว เราจะใช้ตัวดำเนินการ += เพื่อเพิ่ม $hashTable1 และ $hashTable2 ใน $arrayOfHashTables . หรือคุณสามารถใช้ตัวดำเนินการ + เพื่อเพิ่มตารางแฮชลงในอาร์เรย์ของตารางแฮชได้ดังนี้:
ใช้ + ตัวดำเนินการ:
$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เราสร้างตารางแฮชสองตาราง ($hashTable1 และ $hashTable2); แล้วถ้าเราต้องเพิ่มอีก 10 หรือ 15 อันล่ะ? จะเกิดอะไรขึ้นตอนนี้? มันจะส่งผลให้เกิดความซ้ำซ้อนของรหัส เพื่อหลีกเลี่ยงปัญหานี้ เราจะเขียนสิ่งนี้ลงในสคริปต์ชื่อ Test.ps1 และส่งตารางแฮชหนึ่งหรือหลายตารางเป็นพารามิเตอร์ ทำอย่างไร? มาเรียนรู้กันในส่วนต่อไปนี้
การส่งผ่านข้อมูลจากพารามิเตอร์ไปยังอาร์เรย์ของ HashTable
หากต้องการส่งข้อมูลจากพารามิเตอร์ไปยังอาร์เรย์ของตารางแฮช:
- สร้างไฟล์
.ps1สมมติว่าTest.ps1 - ใช้บล็อก
paramเพื่อยอมรับอาร์เรย์ของตารางแฮชเป็นพารามิเตอร์ - ใช้ cmdlet
Write-Hostเพื่อแสดงข้อความที่กำหนดเอง - ใช้ลูป
foreachเพื่อวนซ้ำอาร์เรย์ของตารางแฮช - ใช้
foreachแบบซ้อนกับเมธอดGetEnumerator()เพื่อวนซ้ำรายการตารางแฮชแต่ละรายการ - สำหรับการวนซ้ำแต่ละครั้งของลูปด้านบน ให้ใช้
Write-Hostcmdlet เพื่อเขียนคีย์และค่าในรูปแบบkey=value
สคริปต์ Test.ps1 รับข้อมูลจากพารามิเตอร์ไปยังอาร์เรย์ของ HashTables:
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 ")"ดำเนินการสคริปต์ข้างต้นโดยใช้คำสั่งนี้:
.\Test.ps1 -Hashtables @{ firstName = "Aftab"; lastName = "Raza"; department = "Game Development"},@{ firstName = "Azher"; lastName = "Raza"; department = "Mathematics"}เอาท์พุท :
Hashtables: @(
@{
department = Game Development
firstName = Aftab
lastName = Raza
}
@{
department = Mathematics
firstName = Azher
lastName = Raza
}
)ขั้นแรก เราใช้บล็อก param กับคีย์เวิร์ด param ตามด้วยวงเล็บเปิดและวงเล็บปิด (()); บล็อกนี้ยอมรับพารามิเตอร์ตั้งแต่หนึ่งตัวขึ้นไป เราใช้สิ่งนี้เพื่อรับอาร์เรย์ของตารางแฮชเป็นพารามิเตอร์
ประเด็นคือวิธีที่เราสามารถมั่นใจได้ว่าสคริปต์นี้รับเฉพาะอาร์เรย์ของตารางแฮชเป็นพารามิเตอร์ เราสามารถกำหนด type ให้กับพารามิเตอร์และรวมบล็อก [Parameter()] ได้ ในตัวอย่างต่อไปนี้ เราจะเห็นพารามิเตอร์ที่ยอมรับเฉพาะอาร์เรย์ของตารางแฮชประเภท hashtable[]
ระบุประเภทของพารามิเตอร์:
param(
[Parameter()]
[hashtable[]]$Hashtables
)เราใช้ Write-Host cmdlet บนตำแหน่งต่างๆ ในสคริปต์ที่ให้มาข้างต้น (Test.ps1) เพื่อเขียนเอาต์พุต/ข้อความที่กำหนดเองไปยังโฮสต์ โฮสต์ที่นี่คือคอนโซลหรือเทอร์มินัล PowerShell ของเรา
ต่อไป มีการใช้ลูป foreach เพื่อวนซ้ำอาร์เรย์ของตารางแฮช ($Hashtables) ในการวนซ้ำแต่ละครั้ง เราใช้ foreach แบบซ้อนกับเมธอด GetEnumerator() เพื่อวนซ้ำทุกรายการในตารางแฮชและเขียน key=value โดยใช้ Write-Host cmdlet.
บทบาทของเมธอด GetEnumartor() คืออะไร วิธีการนี้ใช้ในการรับตัวแจงนับ (วัตถุ IEnumerator) ที่เราใช้ในการวนซ้ำผ่านคอลเลกชันที่ระบุ ซึ่งเป็นตารางแฮชในกรณีของเรา
นั่นคือทั้งหมดที่เกี่ยวกับอาร์เรย์ของ HashTables ใน PowerShell
