【问题标题】:Append an Array to an Array of Arrays in PowerShell将数组追加到 PowerShell 中的数组数组
【发布时间】:2011-09-03 16:07:01
【问题描述】:

我正在尝试使用位于磁盘上的 CSV 文件以编程方式在 PowerShell 中构建一个多维数组。我一直在将数组导入临时变量,然后将数组附加到数组中。我得到的不是一个数组数组,而是一个包含总行数的数组。我用较小的数组解决了这个问题,发现了以下内容:

$array1 = "11","12","13"
$array2 = "21","22","23"
$array3 = "31","32","33"

$arrayAll = $array1, $array2, $array3
$arrayAll.Count # returns 3

$arrayAll = @();
$arrayAll += $array1
$arrayAll += $array2
$arrayAll += $array3

$arrayAll.count # returns 9

第一种构建数组的方法有效,但我需要能够使用第二种方法。我该如何解决这个问题?

【问题讨论】:

    标签: arrays powershell


    【解决方案1】:

    这是一个常见的陷阱,数组(和其他集合)可能会“意外”展开。使用逗号运算符(它使用单个项目创建/强制执行数组并避免展开):

    $array1 = "11","12","13"
    $array2 = "21","22","23"
    $array3 = "31","32","33"
    
    $arrayAll = $array1, $array2, $array3
    $arrayAll.Count # returns 3
    
    $arrayAll = @()
    $arrayAll += , $array1
    $arrayAll += , $array2
    $arrayAll += , $array3
    
    $arrayAll.count # returns 3
    
    $arrayAll[1] # gets "21","22","23", i.e. $array2
    

    【讨论】:

    • 我喜欢stackoverflow...我整天都在寻找如何做到这一点,只是为了找到奇怪的逗号解决方案。仅供参考,我是用字符串做的,没有逗号。例如,当您要求 $arrayAll[0][0] 时,您将获得第一个字符串的第一个字符。奇怪...但这解决了它!
    • 谢谢。男孩,Powershell 有一些烦人的“功能”。
    【解决方案2】:

    不确定我不明白您在寻找什么,但它可以提供帮助。

    PS> $arrayAll = New-Object int[][] (3,3)
    PS> $arrayAll[0] = $array1
    PS> $arrayAll[1] = $array2
    PS> $arrayAll[2] = $array3
    
    PS> $arrayAll.Count
    3
    
    PS> $arrayAll[1][2]
    23
    

    这是一种对数组进行编码的方法。

    这是一种二维数组的编码方式

    PS> $arrayAll = New-Object 'int[,]' (3,3)
    PS> $arrayAll[2,0] = 12
    

    【讨论】:

    • 谢谢,唯一的缺点是它们是“锯齿状数组”,我不知道行或列的上限。
    • 我完全编辑了错误的评论,请删除我的“建议更改”我真的很抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多