Свести массив в PowerShell - PullRequest
       18

Свести массив в PowerShell

15 голосов
/ 03 апреля 2009

Предположим, у нас есть:

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

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

Я нашел одно решение :

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

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

Ответы [ 3 ]

12 голосов
/ 03 апреля 2009

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

10 голосов
/ 03 апреля 2009

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

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))))
2 голосов
/ 17 октября 2011

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

[String]::Join("",$array)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...