วิธีค้นหารายการที่ซ้ำกันในอาร์เรย์ใน PowerShell
คุณจำเป็นต้องค้นหาองค์ประกอบที่ซ้ำกันจากอาร์เรย์ใน PowerShell หรือไม่? ในบทช่วยสอน PowerShell นี้ ฉันจะอธิบายวิธีค้นหารายการที่ซ้ำกันในอาร์เรย์ใน PowerShell โดยใช้วิธีการและตัวอย่างต่างๆ
หากต้องการค้นหารายการที่ซ้ำกันในอาร์เรย์ใน PowerShell คุณสามารถใช้ cmdlet Group-Object และกรองสำหรับกลุ่มที่มีการนับมากกว่าหนึ่ง เช่น $duplicates=$array | กลุ่มวัตถุ | โดยที่วัตถุ { $_.Count -gt 1 } | ForEach-Object { $_.Name } จะส่งคืนรายการค่าที่ซ้ำกันจากอาร์เรย์ $array
ค้นหารายการที่ซ้ำกันในอาร์เรย์ใน PowerShell
ใน PowerShell คุณสามารถสร้างอาร์เรย์ได้โดยการกำหนดค่าหลายค่าให้กับตัวแปรตัวเดียว โดยคั่นด้วยเครื่องหมายจุลภาค
$myArray = "apple", "banana", "cherry", "apple", "banana"ในตัวอย่างข้างต้น $myArray คืออาร์เรย์ที่มีห้ารายการ รวมถึงรายการซ้ำบางรายการด้วย ตอนนี้ให้เราตรวจสอบวิธีการต่างๆเพื่อค้นหารายการที่ซ้ำกันจากอาร์เรย์ PowerShell โดยใช้วิธีต่างๆ
วิธีที่ 1: การใช้กลุ่ม-วัตถุ
Group-Object cmdlet เป็นวิธีที่ตรงไปตรงมาในการจัดกลุ่มวัตถุใน PowerShell เมื่อพูดถึงอาร์เรย์ คุณสามารถใช้เพื่อจัดกลุ่มรายการที่คล้ายกันและนับจำนวนได้ หากต้องการค้นหารายการที่ซ้ำกัน คุณสามารถกรองกลุ่มเหล่านี้เพื่อค้นหากลุ่มใดๆ ที่มีจำนวนมากกว่าหนึ่งได้
นี่คือตัวอย่าง:
$myArray = "apple", "banana", "cherry", "apple", "banana"
$duplicates = $myArray | Group-Object | Where-Object { $_.Count -gt 1 }
$duplicates | Foreach-Object { $_.Name }สคริปต์นี้จะส่งออก apple และ banana เนื่องจากรายการเหล่านี้เป็นรายการที่ปรากฏในอาร์เรย์มากกว่าหนึ่งครั้ง คุณสามารถดูผลลัพธ์ได้ในภาพหน้าจอด้านล่าง:
วิธีที่ 2: การใช้ Select-Object
อีกวิธีหนึ่งเกี่ยวข้องกับการใช้ cmdlet Select-Object พร้อมด้วยสวิตช์ -Unique ซึ่งจะกรองรายการที่ซ้ำกันออกไป วิธีการนี้มีประโยชน์ถ้าคุณต้องการดูค่าเฉพาะของอาร์เรย์ PowerShell อย่างไรก็ตาม หากต้องการค้นหารายการที่ซ้ำกัน คุณต้องเปรียบเทียบอาร์เรย์ที่ไม่ซ้ำกับอาร์เรย์ดั้งเดิม
นี่คือวิธีที่คุณสามารถทำได้:
$myArray = "apple", "banana", "cherry", "apple", "banana"
$unique = $myArray | Select-Object -Unique
$duplicates = $myArray | Where-Object { $unique -notcontains $_ }ในสคริปต์นี้ $unique จะมีองค์ประกอบที่ไม่ซ้ำทั้งหมด และ $duplicates จะมีองค์ประกอบที่ซ้ำกันหลังจากเปรียบเทียบกับอาร์เรย์ดั้งเดิม
วิธีที่ 3: การใช้การเปรียบเทียบแบบกำหนดเอง
คุณยังสามารถเขียนสคริปต์แบบกำหนดเองเพื่อค้นหารายการที่ซ้ำกันจากอาร์เรย์ PowerShell คุณสามารถเขียนสคริปต์ที่วนซ้ำอาร์เรย์และตรวจสอบรายการที่ซ้ำกันโดยการติดตามรายการที่ถูกดูไปแล้ว
นี่คือสคริปต์ที่กำหนดเองเพื่อค้นหารายการที่ซ้ำกัน:
$myArray = "apple", "banana", "cherry", "apple", "banana"
$seen = @{}
$duplicates = @()
foreach ($item in $myArray) {
if ($seen[$item]) {
$duplicates += $item
} else {
$seen[$item] = $true
}
}
$duplicates = $duplicates | Select-Object -Unique
$duplicatesสคริปต์นี้ใช้ $seen แบบแฮชเพื่อติดตามรายการที่มีการทำซ้ำ หากมีรายการอยู่ใน hashtable อยู่แล้ว รายการนั้นจะถูกเพิ่มลงในอาร์เรย์ $duplicates สุดท้ายนี้ เราจะกรอง $duplicates ให้เป็นเฉพาะค่าที่ไม่ซ้ำเท่านั้น เนื่องจากสามารถเพิ่มรายการที่ซ้ำกันเดียวกันได้หลายครั้ง
คุณสามารถดูผลลัพธ์ได้ในภาพหน้าจอด้านล่าง:
วิธีที่ 4: การใช้ LINQ ใน PowerShell
สำหรับผู้ที่ก้าวหน้ากว่าเล็กน้อยและคุ้นเคยกับ .NET แล้ว PowerShell สามารถใช้ประโยชน์จาก LINQ (Language-Integrated Query) เพื่อค้นหารายการที่ซ้ำกัน นี่เป็นวิธีการที่ซับซ้อนกว่าแต่อาจมีประสิทธิภาพมากสำหรับชุดข้อมูลขนาดใหญ่
$myArray = "apple", "banana", "cherry", "apple", "banana"
$duplicates = [System.Linq.Enumerable]::ToLookup([object[]]$myArray, [Func[object, object]]{param($i) $i}) |
Where-Object { $_.Count -gt 1 } |
Foreach-Object { $_.Key }สคริปต์นี้จะแปลงอาร์เรย์เป็นการค้นหา โดยที่แต่ละรายการคือคีย์ และกรองคีย์ที่มีมากกว่าหนึ่งรายการออก ซึ่งบ่งชี้ถึงรายการที่ซ้ำกัน
บทสรุป
การค้นหารายการที่ซ้ำกันในอาร์เรย์เป็นเรื่องง่ายและสามารถทำได้หลายวิธีใน PowerShell คุณสามารถใช้ Group-Object, Select-Object, สคริปต์เปรียบเทียบที่กำหนดเอง หรือแม้แต่ LINQ
ในบทความนี้ ฉันได้อธิบายวิธีค้นหารายการที่ซ้ำกันในอาร์เรย์ใน PowerShell โดยใช้วิธีการต่างๆ

