Сгладить массив в PowerShell Предположим, что $a = @(1, @(2, @(3))) Мне хотелось бы сгладить $a, чтобы получить @(1, 2, 3) Я нашел решение @($a | % {$_}).count Но может быть более элегантный способ? Ответ 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)
Ответ 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))))