Supposons que nous avonstableau Aplatir dans PowerShell
$a = @(1, @(2, @(3)))
Je whould aiment aplatir un $ pour obtenir @ (1, 2, 3)
J'ai trouvé a solution
@($a | % {$_}).count
Mais peut-être il y a une manière plus élégante?
Supposons que nous avonstableau Aplatir dans PowerShell
$a = @(1, @(2, @(3)))
Je whould aiment aplatir un $ pour obtenir @ (1, 2, 3)
J'ai trouvé a solution
@($a | % {$_}).count
Mais peut-être il y a une manière plus élégante?
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.
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))))
Quel est le point de préfixer la ligne avec une virgule? – anthonybell
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
Vous pouvez utiliser la méthode String.Join de .NET.
[String]::Join("",$array)
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