如何将整数数组连接成逗号分隔的字符串

时间:2016-02-05 09:46:04

标签: powershell

我有两个问题,实际上:

  1. 如何将整数数组连接成逗号分隔的字符串? (1,2,3)=> “1,2,3”
  2. 如何将整数数组转换为字符串数组? (1,2,3)=> (“1”,“2”,“3”)
  3. $arraylist = New-Object 'system.collections.arraylist'
    $arraylist.Add(1);
    $arraylist.Add(2);
    
    $csv = ?? 
    #($arraylist-join -',') returns error: Cannot convert value "," to type "System.Int32". Error: "Input string was not in a correct format."
    

4 个答案:

答案 0 :(得分:2)

下一段代码片段有助于理解:

$arraylist = New-Object 'system.collections.arraylist'
$arraylist.Add(111)           | Out-Null
$arraylist.Add([string]222)   | Out-Null
$arraylist.Add('"' + 3 + '"') | Out-Null
for($i=0; $i -lt $arraylist.Count; $i++ ){
    write-host $i, $arraylist[$i], $arraylist[$i].GetType()
}
write-host ''
$csv = $arraylist -join ','
$csv

<强>输出

0 111 System.Int32
1 222 System.String
2 "3" System.String

111,222,"3"

字符串类型中"双引号的(非)重要性的附加视图显示了下一个+操作(整数之和但字符串的连接):

    write-host $i, $arraylist[$i], $arraylist[$i].GetType().Name, ($arraylist[$i] + 55) 

给出下一个输出:

0 111 Int32 166
1 222 String 22255
2 "3" String "3"55

111,222,"3"

但是,"双引号在导入.csv文件时具有另一个重要且有意义的作用,例如到Excel表格。

答案 1 :(得分:2)

在您的问题中,您已注释掉以下代码段:

($arraylist-join -',')

因为它返回错误Cannot convert value "," to type "System.Int32"...

原因是-前面的短划线','

在PowerShell中,只有运算符参数以短划线为前缀,而且','都不是(它是参数对于运算符来说,PowerShell解析器变得非常困惑,并试图将-','视为一个会导致负数的值表达式。

只是使破折号无效,你会没事的:

$arraylist -join ','

最后,您可以使用未经检查的强制转换运算符-as(PowerShell 3.0和更高版本)轻松地将整数数组转换为字符串数组:

$StringArray = 1,2,3,4,5 -as [string[]]

或使用显式强制转换(与PowerShell 2.0兼容):

$StringArray = [string[]]@(1,2,3,4,5)

答案 2 :(得分:1)

这对我有用:

[String]::Join(",", $arraylist.ToArray())

我得到1,2

然后是第二部分:

foreach($number in $arraylist) { $number.ToString() }

答案 3 :(得分:-1)

如果这是正确的,我不这样做。通常,他们有powershell2。试试吧。

properties = {"annotators": "...", "parse.flags": " -makeCopulaHead"}
properties = {"annotators": "...", "parse.flags": "makeCopulaHead"}