在一行中打印数组元素

11

我在代码的某个地方填充了一个数组变量$array,例如像下面这样:

this

is

an

array

varaible

如果我想将数组变量像thisisanarrayvariable这样打印成一行,该怎么做?

我尝试了下面的方法,但是程序卡住了,没有输出。

for ($i=0;$i -le $array.length; $i++) { $array[$i] }

显然,我不想像$array[0]+$array[1]+$array[2]..这样将它们粘在一起。

希望能得到更好的答案。

2个回答

21

无分隔符连接数组元素

使用-join操作符...

$array -join ''

...或者使用静态String.Join方法...

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

可以使用静态的String.Concat方法...

[String]::Concat($array)
对于以上所有情况,结果将是一个新的[String]实例,其中每个元素都连接在一起。
修复for循环
您的for循环会逐个输出$array中的每个元素,这将分别呈现在不同的行上。要解决此问题,您可以使用Write-Host向控制台写入内容,并传递-NoNewline使得每次迭代的输出都在同一行上...
for ($i = 0; $i -lt $array.Length; $i++)
{
    Write-Host -NoNewline $array[$i]
}
Write-Host

在输出最后一个数组元素后,额外调用Write-Host会移到新行。

如果不是控制台输出而是想要一个新的[String]实例,则可以在循环中自己连接这些元素...

$result = ''
for ($i = 0; $i -lt $array.Length; $i++)
{
    $result += $array[$i]
}

+= 操作符会在循环的每次迭代中为非 $null 且非空的 $array[$i] 创建一个新的中间 [String] 实例,因此使用 [StringBuilder] 更加高效,特别是当 $array.Length 很大时...

$initialCapacity = [Int32] ($array | Measure-Object -Property 'Length' -Sum).Sum
$resultBuilder = New-Object -TypeName 'System.Text.StringBuilder' -ArgumentList $initialCapacity
for ($i = 0; $i -lt $array.Length; $i++)
{
    $resultBuilder.Append($array[$i]) | Out-Null # Suppress [StringBuilder] method returning itself
}
$result = $resultBuilder.ToString()

使用join没有成功。 - user1627901
你尝试了什么?结果是什么? - Lance U. Matthews
我的错。我之前的评论没有使用-join $array[string]$srray,但是使用[string]$array会在元素之间产生空格。 - user1627901
使用-join ','可以将数组以CSV格式检索出来。对于带引号的CSV:$inner = $tokens -join '","'; $output = """$inner"""; $output - Underverse

5

只需使用

-join $array

这将把所有元素粘合在一起。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接