2009-04-02 22 views

Respuesta

11

La tubería es la forma correcta de aplanar las estructuras anidadas, por lo que no estoy seguro de lo que sería más "elegante". Sí, la sintaxis es un poco ruidosa, pero francamente bastante útil.

+0

La canalización a '%' funciona, pero no está conectada a measure-object, o '?'. Debe ser debido a la forma en que '%' procesa la entrada desde una tubería, en lugar de la tubería misma. – jpaugh

9

mismo código, simplemente envuelto en función de:

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

Pruebas:

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

¿Cuál es el punto de anteponer la línea con una coma? – anthonybell

+1

Prefijo con una coma fuerza powershell para devolver una matriz, incluso si solo hay un elemento para devolver. Sin la coma, Powershell desenredará la matriz en un objeto chamuscado del mismo tipo que el contenido de la matriz. Esto puede ser muy confuso para las personas que provienen de otros tipos de lenguaje fuerte. – CarlR

5

puede utilizar el método string.join de .NET.

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