วิธีลบรายการที่ซ้ำกันออกจากอาร์เรย์ใน PowerShell
คุณจำเป็นต้องลบรายการที่ซ้ำกันออกจากอาร์เรย์ PowerShell หรือไม่? ในบทช่วยสอน PowerShell นี้ ฉันจะอธิบายวิธีลบรายการที่ซ้ำกันออกจากอาร์เรย์ใน PowerShell โดยใช้วิธีและตัวอย่างต่างๆ
หากต้องการลบรายการที่ซ้ำกันออกจากอาร์เรย์ใน PowerShell ให้ใช้ cmdlet Select-Object พร้อมสวิตช์ -Unique ตัวอย่างเช่น $uniqueArray=$array | Select-Object -Unique จะกรอง $array เพื่อรวมเฉพาะองค์ประกอบที่ไม่ซ้ำเท่านั้น วิธีการนี้มีประสิทธิภาพและกระชับสำหรับการรับอาร์เรย์ที่มีค่าที่แตกต่างกันเท่านั้น
ลบรายการที่ซ้ำกันออกจากอาร์เรย์ใน PowerShell
หากคุณยังใหม่กับอาร์เรย์ PowerShell โปรดดูบทความเกี่ยวกับอาร์เรย์ PowerShell
นี่คือตัวอย่างของอาร์เรย์อย่างง่ายใน PowerShell:
$array = "apple", "banana", "apple", "cherry", "banana"ในอาร์เรย์นี้ เรามีรายการที่ซ้ำกันสำหรับ "apple" และ "banana" ตอนนี้ ฉันจะแสดงวิธีการต่างๆ เพื่อลบรายการที่ซ้ำกันเหล่านี้ออกจากอาร์เรย์นี้ใน PowerShell
วิธีที่ 1: การใช้ Select-Object ด้วย -Unique
หนึ่งในวิธีที่ง่ายที่สุดในการลบรายการที่ซ้ำกันออกจากอาร์เรย์ใน PowerShell คือการใช้ cmdlet Select-Object พร้อมด้วยพารามิเตอร์ -Unique
นี่คือวิธีการใช้งาน:
$array = "apple", "banana", "apple", "cherry", "banana"
$uniqueArray = $array | Select-Object -Unique
$uniqueArrayคำสั่งนี้จะไพพ์ $array ลงใน Select-Object ซึ่งเลือกแต่ละรายการ พารามิเตอร์ -Unique จะกรองรายการที่ซ้ำกันออก ทำให้เราเหลืออาร์เรย์ของค่าที่ไม่ซ้ำ
ลองดูภาพหน้าจอด้านล่างหลังจากที่ฉันรันสคริปต์ PowerShell โดยใช้โค้ด VS:
วิธีที่ 2: การใช้ Sort-Object และ Get-Unique
อีกวิธีหนึ่งเกี่ยวข้องกับการเรียงลำดับอาร์เรย์โดยใช้ Sort-Object ตามด้วย Get-Unique สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณต้องการให้อาร์เรย์ผลลัพธ์ถูกเรียงลำดับและไม่ซ้ำกัน
นี่คือตัวอย่าง:
$sortedUniqueArray = $array | Sort-Object -Uniqueหรือคุณสามารถใช้ Get-Unique:
$array = "apple", "banana", "apple", "cherry", "banana"
$sortedArray = $array | Sort-Object
$uniqueSortedArray = $sortedArray | Get-Unique
$uniqueSortedArrayขั้นแรก เราเรียงลำดับอาร์เรย์ จากนั้นเราไปป์อาร์เรย์ที่เรียงลำดับแล้วลงใน Get-Unique Get-Unique cmdlet จะเปรียบเทียบแต่ละรายการในรายการที่เรียงลำดับกับรายการถัดไป กำจัดรายการที่ซ้ำกัน และส่งกลับเพียงอินสแตนซ์เดียวของแต่ละรายการ
คุณสามารถดูผลลัพธ์ได้ในภาพหน้าจอด้านล่างหลังจากที่ฉันรันสคริปต์โดยใช้โค้ด VS
วิธีที่ 3: การใช้ Hashtable
สำหรับอาร์เรย์ขนาดใหญ่หรือเมื่อประสิทธิภาพเป็นปัญหา การใช้แฮชเทเบิลสามารถลบรายการที่ซ้ำกันใน PowerShell ได้อย่างมีประสิทธิภาพ แฮชเทเบิลคือโครงสร้างข้อมูลที่จัดเก็บคู่คีย์-ค่า และไม่อนุญาตให้มีคีย์ที่ซ้ำกัน
ต่อไปนี้คือวิธีที่คุณสามารถใช้แฮชเทเบิลเพื่อลบรายการที่ซ้ำกัน:
$hashtable = @{}
foreach ($item in $array) {
$hashtable[$item] = $true
}
$uniqueArray = $hashtable.Keysในสคริปต์นี้ เราสร้างแฮชเทเบิลว่างใน PowerShell จากนั้นเราจะวนซ้ำแต่ละรายการในอาร์เรย์เดิมและเพิ่มลงใน hashtable โดยที่แต่ละรายการจะกลายเป็นคีย์ที่มีค่า $true เนื่องจากแฮชเทเบิลไม่สามารถมีคีย์ที่ซ้ำกันได้ จึงช่วยลบคีย์ที่ซ้ำกันได้อย่างมีประสิทธิภาพ ในที่สุด เราก็แยกคีย์ออกจากแฮชเทเบิล ซึ่งเป็นรายการที่ไม่ซ้ำใครจากอาเรย์ดั้งเดิม
วิธีที่ 4: การใช้ LINQ
สำหรับผู้ที่คุ้นเคยกับ .NET นั้น PowerShell สามารถใช้ประโยชน์จากความสามารถ Language-Integrated Query (LINQ) เพื่อลบรายการที่ซ้ำกัน วิธีนี้มีขั้นสูงกว่าและเหมาะสำหรับผู้ที่ต้องการควบคุมวิธีประมวลผลข้อมูลมากขึ้น
นี่คือตัวอย่างการใช้ LINQ:
$uniqueArray = [System.Linq.Enumerable]::Distinct([System.Collections.Generic.List[string]]$array)ในบรรทัดโค้ดนี้ เราใช้วิธี Distinct จากคลาส System.Linq.Enumerable เพื่อดึงองค์ประกอบที่แตกต่างจากอาร์เรย์ของเรา ซึ่งถูกส่งไปยังรายการประเภททั่วไป <รหัส>สตริง
ลบรายการที่ซ้ำกันออกจากอาร์เรย์หลายมิติใน PowerShell
ตอนนี้ให้เราดูวิธีลบรายการที่ซ้ำกันออกจากอาร์เรย์หลายมิติใน PowerShell
การลบรายการที่ซ้ำกันออกจากอาร์เรย์หลายมิติใน PowerShell อาจมีความซับซ้อนมากขึ้น เนื่องจาก Select-Object -Unique ไม่ทำงานบนอาร์เรย์ของอาร์เรย์โดยตรง แต่คุณใช้ตรรกะการเปรียบเทียบที่กำหนดเองร่วมกับ Group-Object cmdlet แทนได้ นี่คือตัวอย่างที่จะลบรายการที่ซ้ำกันตามคุณสมบัติเฉพาะของอาร์เรย์หลายมิติ:
# Define a multidimensional array with duplicate sub-arrays based on the first element
$multiArray = @(
@(1, 'apple'),
@(2, 'banana'),
@(1, 'apple'), # duplicate
@(3, 'cherry')
)
# Remove duplicates by grouping on the first element and then selecting the first group occurrence
$uniqueMultiArray = $multiArray | Group-Object { $_[0] } | ForEach-Object { $_.Group[0] }
# Display the unique multidimensional array
$uniqueMultiArray
ในตัวอย่างนี้ $multiArray คืออาร์เรย์ PowerShell หลายมิติที่มีรายการซ้ำบางรายการ เราใช้ Group-Object เพื่อจัดกลุ่มอาร์เรย์ย่อยตามองค์ประกอบแรก จากนั้นสำหรับแต่ละกลุ่ม เราจะเลือกเฉพาะอาร์เรย์ย่อยแรกโดยใช้ ForEach-Object { $_.Group[ 0] . $uniqueMultiArray จะมีอาร์เรย์ย่อยที่ไม่ซ้ำกันโดยอิงตามองค์ประกอบแรกของแต่ละอาร์เรย์ย่อย
วิธีการนี้จะถือว่าคำจำกัดความ "ซ้ำ" จะขึ้นอยู่กับองค์ประกอบแรกของแต่ละอาร์เรย์ย่อย หากคำจำกัดความของรายการซ้ำของคุณแตกต่างออกไป คุณจะต้องปรับสคริปต์ให้เหมาะสมโดยเปลี่ยนบล็อกสคริปต์ { $_[0] } ใน cmdlet Group-Object ให้ตรงกัน เกณฑ์ของคุณสำหรับเอกลักษณ์
ที่นี่ คุณจะเห็นผลลัพธ์ในภาพหน้าจอด้านล่างหลังจากที่ฉันรันสคริปต์ PowerShell โดยใช้โค้ด Visual Studio
บทสรุป
การลบรายการที่ซ้ำกันออกจากอาร์เรย์ใน PowerShell สามารถทำได้ด้วยวิธีการต่างๆ วิธีที่ง่ายที่สุดวิธีหนึ่งคือการใช้ Select-Object -Unique เพื่อความเรียบง่าย ในขณะที่ผู้ใช้ขั้นสูงอาจเลือกใช้ hashtable หรือ LINQ เพื่อประสิทธิภาพและการควบคุม
ฉันหวังว่าตอนนี้คุณคงพอมีไอเดียวิธีลบรายการที่ซ้ำกันออกจากอาร์เรย์ใน PowerShell โดยใช้วิธีต่างๆ เช่น:
- การใช้ Select-Object กับ -Unique
- การใช้ Sort-Object และ Get-Unique
- การใช้แฮชเทเบิล
- การใช้ LINQ


