Ответ 1
Трубы - это правильный способ сгладить вложенные структуры, поэтому я не уверен, что будет больше "элегантным". Да, синтаксис немного строчный, шумный, но, откровенно говоря, вполне исправный.
Предположим, что
$a = @(1, @(2, @(3)))
Мне хотелось бы сгладить $a, чтобы получить @(1, 2, 3)
Я нашел решение
@($a | % {$_}).count
Но может быть более элегантный способ?
Трубы - это правильный способ сгладить вложенные структуры, поэтому я не уверен, что будет больше "элегантным". Да, синтаксис немного строчный, шумный, но, откровенно говоря, вполне исправный.
Тот же код, только что завернутый в функцию:
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))))
Вы можете использовать метод .NET String.Join.
[String]::Join("",$array)