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

วิธีลบรายการที่ซ้ำกันออกจากอาร์เรย์ใน 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

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