ค้นหาเว็บไซต์

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-Host cmdlet เพื่อเขียนคีย์และค่าในรูปแบบ 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

บทความที่เกี่ยวข้อง