เปรียบเทียบสองอาร์เรย์สำหรับองค์ประกอบที่ขาดหายไปใน PowerShell
เมื่อทำงานกับอาร์เรย์ใน PowerShell งานทั่วไปคือการเปรียบเทียบเพื่อค้นหาว่าองค์ประกอบใดที่ขาดหายไปจากอาร์เรย์หนึ่งเมื่อเทียบกับอีกอาร์เรย์หนึ่ง PowerShell ให้หลายวิธีในการเปรียบเทียบสองอาร์เรย์สำหรับองค์ประกอบที่ขาดหายไปใน PowerShell ด้วยตัวอย่าง
หากต้องการเปรียบเทียบสองอาร์เรย์สำหรับองค์ประกอบที่ขาดหายไปใน PowerShell คุณสามารถใช้ cmdlet Compare-Object กับพารามิเตอร์ -ReferenceObject และ -DifferenceObject เพื่อระบุความแตกต่าง ตัวอย่างเช่น $missing=Compare-Object -ReferenceObject $array1 -DifferenceObject $array2 -PassThru จะส่งออกองค์ประกอบที่มีอยู่ใน $array1 แต่ไม่มีใน $array2. วิธีการนี้มีประสิทธิภาพและตรงไปตรงมาในการค้นหาองค์ประกอบที่ขาดหายไประหว่างอาร์เรย์
เปรียบเทียบสองอาร์เรย์สำหรับองค์ประกอบที่ขาดหายไปใน PowerShell
ตอนนี้ ให้เราตรวจสอบวิธีการต่างๆ เพื่อเปรียบเทียบสองอาร์เรย์เพื่อหาองค์ประกอบที่ขาดหายไปใน PowerShell
1. การใช้ Compare-Object Cmdlet
วิธีที่ตรงไปตรงมาที่สุดในการเปรียบเทียบสองอาร์เรย์ใน PowerShell คือการใช้ cmdlet Compare-Object cmdlet นี้ใช้วัตถุสองชุดและเปรียบเทียบ
นี่คือสคริปต์ PowerShell ฉบับสมบูรณ์ที่จะตรวจสอบองค์ประกอบที่ขาดหายไปในอาร์เรย์ PowerShell
$array1 = @(1,2,3,4,5)
$array2 = @(3,4,5,6,7)
$missing = Compare-Object -ReferenceObject $array1 -DifferenceObject $array2 -PassThru
Write-Host "The following elements are missing in the second array:" $missing
ในตัวอย่างข้างต้น $array1 เป็นวัตถุอ้างอิง และ $array2 เป็นวัตถุที่แตกต่าง พารามิเตอร์ -PassThru ใช้เพื่อส่งออกองค์ประกอบที่ขาดหายไปจริง ผลลัพธ์จะแสดงให้คุณเห็นว่าองค์ประกอบใดอยู่ใน $array1 แต่ไม่อยู่ใน $array2
คุณสามารถดูได้ในภาพหน้าจอด้านล่างหลังจากที่ฉันรันโค้ดโดยใช้ VS Code:
2. โดยการวนลูปผ่านอาร์เรย์
อีกวิธีหนึ่งในการค้นหาองค์ประกอบที่ขาดหายไปคือการวนซ้ำแต่ละอาร์เรย์ด้วยตนเองและการเปรียบเทียบองค์ประกอบใน PowerShell วิธีนี้ช่วยให้คุณควบคุมกระบวนการเปรียบเทียบได้มากขึ้น
นี่คือตัวอย่างที่สมบูรณ์ของ “PowerShell เปรียบเทียบสองอาร์เรย์สำหรับองค์ประกอบที่ขาดหายไป“
$array1 = @(1,2,3,4,5)
$array2 = @(3,4,5,6,7)
$missing = @()
foreach ($item in $array1) {
if ($array2 -notcontains $item) {
$missing += $item
}
}
Write-Host "The following elements are missing in the second array:" $missingที่นี่ เราเริ่มต้นอาร์เรย์ว่าง $missing เพื่อจัดเก็บองค์ประกอบที่ขาดหายไป จากนั้นเราจะวนซ้ำแต่ละองค์ประกอบใน $array1 และตรวจสอบว่า $array2 ไม่มีองค์ประกอบนั้นอยู่หรือไม่ หากไม่เป็นเช่นนั้น เราจะเพิ่มลงในอาร์เรย์ $missing หลังจากการวนซ้ำ เราจะพิมพ์องค์ประกอบที่ขาดหายไป
เมื่อคุณรันโค้ดแล้ว คุณจะเห็นผลลัพธ์ในภาพหน้าจอด้านล่าง:
3. การใช้ฟังก์ชันแบบกำหนดเอง
คุณอาจต้องการสร้างฟังก์ชันแบบกำหนดเองสำหรับการเปรียบเทียบที่ซับซ้อนมากขึ้นหรืองานซ้ำใน PowerShell
นี่คือสคริปต์ PowerShell ที่สมบูรณ์
function Get-MissingElements ($array1, $array2) {
Compare-Object -ReferenceObject $array1 -DifferenceObject $array2 -PassThru | Where-Object { $_.SideIndicator -eq '<=' }
}
$array1 = @(1,2,3,4,5)
$array2 = @(3,4,5,6,7)
$missing = Get-MissingElements -array1 $array1 -array2 $array2
Write-Host "The following elements are missing in the second array:" $missing
ในตัวอย่างนี้ เรากำหนดฟังก์ชัน Get-MissingElements ที่ใช้ Compare-Object ภายใน ฟังก์ชั่นกรององค์ประกอบที่อยู่ในวัตถุอ้างอิงเท่านั้น (ระบุโดย <=) จากนั้นเราจะเรียกใช้ฟังก์ชันนี้พร้อมกับอาร์เรย์ของเราและส่งออกองค์ประกอบที่ขาดหายไป
4. การใช้ Hashtable สำหรับอาร์เรย์ขนาดใหญ่
เมื่อต้องจัดการกับอาร์เรย์ขนาดใหญ่ ประสิทธิภาพอาจกลายเป็นปัญหาได้ สามารถใช้แฮชเทเบิลเพื่อปรับปรุงประสิทธิภาพของการดำเนินการค้นหา
นี่คือตัวอย่างวิธีใช้ hashtable เพื่อเปรียบเทียบสองอาร์เรย์สำหรับองค์ประกอบที่ขาดหายไปใน PowerShell
$array1 = @(1,2,3,4,5)
$array2 = @(3,4,5,6,7)
$hashtable = @{}
foreach ($item in $array2) {
$hashtable[$item] = $true
}
$missing = @()
foreach ($item in $array1) {
if (-not $hashtable.ContainsKey($item)) {
$missing += $item
}
}
Write-Host "The following elements are missing in the second array:" $missingในตัวอย่างนี้ อันดับแรกเราสร้างแฮชเทเบิลจาก $array2 โดยตั้งค่าแต่ละองค์ประกอบเป็นคีย์ที่มีค่า $true จากนั้นเราจะวนซ้ำ $array1 และตรวจสอบว่า hashtable มีคีย์อยู่หรือไม่ ถ้าไม่เช่นนั้น แสดงว่าองค์ประกอบนั้นหายไป และเราจะเพิ่มองค์ประกอบนั้นลงในอาร์เรย์ $missing
คุณสามารถตรวจสอบผลลัพธ์จากภาพหน้าจอด้านล่างได้ ฉันรันโค้ดโดยใช้โค้ด VS
บทสรุป
การเปรียบเทียบอาร์เรย์เพื่อค้นหาองค์ประกอบที่ขาดหายไปใน PowerShell สามารถทำได้หลายวิธี Compare-Object cmdlet เป็นวิธีการที่ตรงที่สุดและทำงานได้ดีในกรณีส่วนใหญ่ การวนซ้ำให้การควบคุมและการปรับแต่งที่มากขึ้น ในขณะที่ฟังก์ชันแบบกำหนดเองนั้นยอดเยี่ยมสำหรับการนำมาใช้ซ้ำ สำหรับอาร์เรย์ขนาดใหญ่ แฮชเทเบิลสามารถให้ประโยชน์ด้านประสิทธิภาพได้
ฉันหวังว่าตอนนี้คุณจะมีแนวคิดที่ชัดเจนเกี่ยวกับวิธีเปรียบเทียบสองอาร์เรย์สำหรับองค์ประกอบที่ขาดหายไปใน PowerShell


