Подтвердить что ты не робот

Сгладить массив в PowerShell

Предположим, что

$a = @(1, @(2, @(3)))

Мне хотелось бы сгладить $a, чтобы получить @(1, 2, 3)

Я нашел решение

@($a | % {$_}).count

Но может быть более элегантный способ?

4b9b3361

Ответ 1

Трубы - это правильный способ сгладить вложенные структуры, поэтому я не уверен, что будет больше "элегантным". Да, синтаксис немного строчный, шумный, но, откровенно говоря, вполне исправный.

Ответ 2

Тот же код, только что завернутый в функцию:

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

Тестирование:

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))))

Ответ 3

Вы можете использовать метод .NET String.Join.

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