Asumamos que tenemosgama Aplanar en PowerShell
$a = @(1, @(2, @(3)))
I whould les gusta aplanar $ a para obtener @ (1, 2, 3)
he encontrado a solution
@($a | % {$_}).count
Pero puede haber una manera más elegante?
Asumamos que tenemosgama Aplanar en PowerShell
$a = @(1, @(2, @(3)))
I whould les gusta aplanar $ a para obtener @ (1, 2, 3)
he encontrado a solution
@($a | % {$_}).count
Pero puede haber una manera más elegante?
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.
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))))
¿Cuál es el punto de anteponer la línea con una coma? – anthonybell
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
puede utilizar el método string.join de .NET.
[String]::Join("",$array)
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