highspeed1
Goto Top

PowerShell Kombinieren aller Werte eines Arrays

Hallo Forum.

Zunächst wünsche ich euch ein Frohes Neues Jahr und alles gute für 2025.

Ich bin auf der Suche nach einer Möglichkeit alle Werte eines Arrays zu kombinieren. Die Werte können jedoch auch Leerzeichen beinhalten. Leider habe ich im Netz keine Lösung für dieses Problem gefunden.

Dieses Array soll als Input verwendet werden:
 $Input = @('Wert 1','Wert 2','Wert 3')  

Dieses Array sollte als Lösung herauskommen:
$Output = @(
   @('Wert 1'),  
   @('Wert 1','Wert 2'),  
   @('Wert 1','Wert 2','Wert 3'),  
   @('Wert 1','Wert 3'),  
   @('Wert 1','Wert 3','Wert 2'),  
   @('Wert 2'),  
   @('Wert 2','Wert 1'),  
   @('Wert 2','Wert 1','Wert 3'),  
   @('Wert 2','Wert 3'),  
   @('Wert 2','Wert 3','Wert 1'),  
   @('Wert 3'),  
   @('Wert 3','Wert 1'),  
   @('Wert 3','Wert 1','Wert 2'),  
   @('Wert 3','Wert 2'),  
   @('Wert 3','Wert 2','Wert 1')  
)

Es soll also keine Permutation rauskommen.

Egal was ich probiert habe wurde mir immer der String in zwei Werte gesplittet. Also @('Wert','1') für die weitere Berechnung der Kombinationen verwendet.

Hat hierfür jemand eine Lösung für diese Problem?

Content-ID: 670623

Url: https://administrator.de/forum/powershell-kombinieren-aller-werte-eines-arrays-670623.html

Printed on: January 14, 2025 at 06:01 o'clock

UnbekannterNR1
Solution UnbekannterNR1 Jan 10, 2025 updated at 12:25:43 (UTC)
Goto Top
ChatGPT to the Rescue:

# Funktion zur Generierung aller Kombinationen
function Get-Combinations {
    param (
        [array]$Array,
        [array]$CurrentCombination = @(),
        [ref]$Result = $(New-Object System.Collections.ArrayList)
    )

    # Wenn keine weiteren Elemente im Array sind
    if ($Array.Count -eq 0) {
        # Füge die aktuelle Kombination als Array zu den Resultaten hinzu
        if ($CurrentCombination.Count -gt 0) {
            [void]$Result.Value.Add(@($CurrentCombination))
        }
        return
    }

    # Erstes Element extrahieren
    $firstElement = $Array[0]
    $remainingArray = if ($Array.Count -gt 1) { $Array[1..($Array.Count - 1)] } else { @() }

    # Mit dem aktuellen Element
    Get-Combinations -Array $remainingArray -CurrentCombination ($CurrentCombination + $firstElement) -Result $Result

    # Ohne das aktuelle Element
    Get-Combinations -Array $remainingArray -CurrentCombination $CurrentCombination -Result $Result
}

# Eingabe-Array definieren
$Eingabe = @('Wert 1', 'Wert 2', 'Wert 3')  

# Initialisiere das Ergebnis
$Result = [ref]$(New-Object System.Collections.ArrayList)

# Generiere Kombinationen
Get-Combinations -Array $Eingabe -Result $Result

# Filtere ungültige Einträge
$ValidResults = $Result.Value | Where-Object { $_ -ne $null -and $_.Count -gt 0 }

# Ergebnisse sortieren und ausgeben
$Output = $ValidResults | Sort-Object { $_.Count }
Write-Output "Alle Kombinationen:"  
$Output | ForEach-Object { Write-Output ($_ -join ", ") }  

so oder so ähnlich face-smile
Edit: Okay es sortiert jetzt nicht rückwärts auch noch, das würde das ganze nochmal verlängern ...
HighSpeed1
HighSpeed1 Jan 10, 2025 at 12:32:21 (UTC)
Goto Top
Hallo UnbekannterNR1

Super. Genau sowas habe ich gesucht. Den Rest kann man ja als Permutation erzeugen.

Schönes Wochenende.