2009-04-02 5 views

Répondre

11

La tuyauterie est la façon correcte d'aplatir les structures imbriquées, donc je ne suis pas sûr de ce que serait de plus "élégant". Oui, la syntaxe est un peu bruyante ligne, mais franchement tout à fait utilisable.

+0

L'acheminement vers '%' fonctionne, mais pas avec un objet de mesure, ou '?'. Cela doit être dû à la façon dont '%' traite les entrées d'un pipeline, plutôt que la tuyauterie elle-même. – jpaugh

9

Même code, juste enveloppé dans la fonction:

function Flatten($a) 
{ 
    ,@($a | % {$_}) 
} 

Test:

function AssertLength($expectedLength, $arr) 
{ 
    if($ExpectedLength -eq $arr.length) 
    { 
     Write-Host "OK" 
    } 
    else 
    { 
     Write-Host "FAILURE" 
    } 
} 

# Tests 
AssertLength 0 (Flatten @()) 
AssertLength 1 (Flatten 1) 
AssertLength 1 (Flatten @(1)) 
AssertLength 2 (Flatten @(1, 2)) 
AssertLength 2 (Flatten @(1, @(2))) 
AssertLength 3 (Flatten @(1, @(2, @(3)))) 
+0

Quel est le point de préfixer la ligne avec une virgule? – anthonybell

+1

Le préfixage avec une virgule force powershell à renvoyer un tableau même s'il n'y a qu'un seul élément à renvoyer. Sans la virgule, Powershell va démêler le tableau en un objet unique du même type que le contenu du tableau. Cela peut être très déroutant pour les personnes venant d'autres langues fortement typées. – CarlR

5

Vous pouvez utiliser la méthode String.Join de .NET.

[String]::Join("",$array) 
Questions connexes