Weboldal keresés

Hogyan lehet eltávolítani a duplikációkat egy tömbből a PowerShellben?


El kell távolítania a duplikációkat a PowerShell-tömbből? Ebben a PowerShell-oktatóanyagban elmagyarázom, hogyan távolíthatok el ismétlődéseket egy tömbből a PowerShellben különböző módszerek és példák segítségével.

A PowerShell tömbjének ismétlődéseinek eltávolításához használja a Select-Object parancsmagot a -Unique kapcsolóval. Például $uniqueArray=$tömb | A Select-Object -Unique szűri a $array elemeket, hogy csak egyedi elemeket tartalmazzon. Ez a megközelítés hatékony és tömör, ha csak különálló értékeket tartalmazó tömbet kapunk

Távolítsa el a duplikációkat egy tömbből a PowerShellben

Ha még nem ismeri a PowerShell-tömböt, olvassa el a PowerShell-tömbről szóló cikket.

Íme egy példa egy egyszerű tömbre a PowerShellben:

$array = "apple", "banana", "apple", "cherry", "banana"

Ebben a tömbben van néhány ismétlődő bejegyzésünk az „alma” és a „banán” kifejezésekre. Most különböző módszereket mutatok be, amelyekkel eltávolíthatja ezeket a duplikációkat a PowerShell-tömbből.

1. módszer: A Select-Object használata az -Unique funkcióval

Az egyik legegyszerűbb módja a duplikációk eltávolításának egy tömbből a PowerShellben, ha a Select-Object parancsmagot használja a -Unique paraméterrel.

A következőképpen használhatja:

$array = "apple", "banana", "apple", "cherry", "banana"
$uniqueArray = $array | Select-Object -Unique
$uniqueArray

Ez a parancs a $array-t a Select-Object-ba vezeti, amely kijelöli az egyes elemeket. A -Unique paraméter kiszűri az ismétlődéseket, így egyedi értékek tömbje marad.

Nézze meg az alábbi képernyőképet, miután végrehajtottam a PowerShell-szkriptet VS-kóddal:

2. módszer: A Sort-Object és a Get-Unique használata

Egy másik módszer a tömb rendezése a Sort-Object, majd a Get-Unique használatával. Ez különösen akkor hasznos, ha azt szeretné, hogy az eredményül kapott tömb egyedi és rendezett legyen.

Íme egy példa:

$sortedUniqueArray = $array | Sort-Object -Unique

Alternatív megoldásként használhatja a Get-Unique parancsot:

$array = "apple", "banana", "apple", "cherry", "banana"
$sortedArray = $array | Sort-Object
$uniqueSortedArray = $sortedArray | Get-Unique
$uniqueSortedArray

Először rendezzük a tömböt, majd a rendezett tömböt a Get-Unique-ba vezetjük. A Get-Unique parancsmag összehasonlítja a rendezett lista minden elemét a következő elemmel, kiküszöböli az ismétlődéseket, és minden elemből csak egy példányt ad vissza.

A kimenetet az alábbi képernyőképen láthatja, miután végrehajtottam a szkriptet VS kóddal.

3. módszer: Hashtable használata

Nagyobb tömbök esetén, vagy ha a teljesítmény aggodalomra ad okot, a hashtable használatával hatékonyan eltávolíthatja a duplikációkat a PowerShellben. A hashtable olyan adatstruktúra, amely kulcs-érték párokat tárol, és nem teszi lehetővé a kulcsok megkettőzését.

A következőképpen használhatja a hashtablet az ismétlődések eltávolításához:

$hashtable = @{}
foreach ($item in $array) {
    $hashtable[$item] = $true
}
$uniqueArray = $hashtable.Keys

Ebben a szkriptben egy üres hashtablet hozunk létre a PowerShellben. Ezután az eredeti tömb minden elemét végigpörgetjük, és hozzáadjuk a hashtable-hoz, ahol minden elem $true értékű kulccsá válik. Mivel a hashtable-oknak nem lehetnek duplikált kulcsai, ez hatékonyan eltávolítja a duplikációkat. Végül kivonjuk a kulcsokat a hashtable-ból, az egyedi elemeket az eredeti tömbből.

4. módszer: A LINQ használata

Azok számára, akik ismerik a .NET-et, a PowerShell kihasználhatja a nyelvbe integrált lekérdezés (LINQ) képességeit az ismétlődések eltávolítására. Ez a módszer fejlettebb és alkalmas azok számára, akiknek nagyobb ellenőrzésre van szükségük az adatok feldolgozása felett.

Íme egy példa a LINQ használatára:

$uniqueArray = [System.Linq.Enumerable]::Distinct([System.Collections.Generic.List[string]]$array)

Ebben a kódsorban a Distinct metódust használjuk a System.Linq.Enumerable osztályból, hogy különálló elemeket kérjünk le a tömbünkből, amely egy általános típusú listába kerül. karakterlánc.

Távolítsa el a duplikációkat egy többdimenziós tömbből a PowerShellben

Most pedig nézzük meg, hogyan távolíthatunk el ismétlődéseket egy többdimenziós tömbből a PowerShellben.

Az ismétlődések eltávolítása többdimenziós tömbből a PowerShellben bonyolultabb lehet, mivel a Select-Object -Unique nem működik közvetlenül a tömbökön. Ehelyett egyéni összehasonlítási logika kombinációját használhatja a Group-Object parancsmaggal. Íme egy példa, amely egy többdimenziós tömb egy adott tulajdonsága alapján távolítja el a duplikációkat:

# 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

Ebben a példában a $multiArray egy többdimenziós PowerShell-tömb néhány ismétlődő bejegyzéssel. A Group-Object használatával csoportosítjuk az altömböket az első elem szerint, majd minden csoporthoz csak az első altömböt jelöljük ki a ForEach-Object { $_.Group[ használatával. 0] }. A $uniqueMultiArray az egyes altömbök első eleme alapján az egyedi altömböket fogja tartalmazni.

Ez a módszer feltételezi, hogy a „duplikált” definíció az egyes altömbök első elemén alapul. Ha az ismétlődések definíciója eltérő, akkor ennek megfelelően módosítania kell a szkriptet a Group-Object parancsmagban található { $_[0] } szkriptblokk módosításával, hogy megfeleljen. az egyediség kritériumai.

Itt láthatja a kimenetet az alábbi képernyőképen, miután végrehajtottam a PowerShell-szkriptet a Visual Studio kóddal.

Következtetés

Az ismétlődések eltávolítása egy tömbből a PowerShellben többféle módszerrel is megvalósítható. Az egyik legegyszerűbb módszer a Select-Object -Unique használata az egyszerűség kedvéért, míg a haladóbb felhasználók választhatnak hashtablet vagy LINQ-t a teljesítmény és a vezérlés érdekében.

Remélem, most már van ötlete arról, hogyan távolíthatja el a duplikációkat a PowerShell tömbjéből különféle módszerekkel, például:

  • A Select-Object használata az -Unique funkcióval
  • Sort-Object és Get-Unique használata
  • Hashtable használata
  • LINQ használata

Kapcsolódó cikkek