Powershell 字符串到二维字符串数组 - 不是字符数组

时间:2021-07-07 01:59:51

标签: arrays string powershell multidimensional-array

更新:我正在尝试将用户输入值(字符串)放入二维数组中。出于测试目的,我为变量分配了一个字符串。 目标:稍后我希望我的程序查看阵列的第 1 列的每一行,并执行一些操作,例如如果显示打印机则安装打印机软件,如果没有打印机则不安装软件。我可以为一维数组执行此操作,但我想要 1 到 10 行。这就是为什么二维数组会很复杂。

我想学习这样做,而不是要求您编写我所有的代码。 谢谢。

这是我的代码。

#set user input to a string variable
$UserInputVar = "computer1,noPrinter,Computer2,Printer,Computer3,Printer"

#this is my 2d array; Declare. i want to be able to use anywhere from 1 to 10 rows and always 2 columns
$my2d=[object[]]::(,2)

$my2d.clear #for testing purpose

#assign values of sting to 2 dimensional array
#split the string at each comma(,)
$my2d = $UserInputVar.Split(",")

#show me the values in this array
"`n #my2d[0][0] "
$my2d[0][0]   #expect value 'computer1'
$my2d[0][1]   #expect value 'noPrinter'
$my2d[0][2] 
$my2d[0][3]


"`n #my2d[1][0] "
$my2d[1][0]   #expect value 'computer2'
$my2d[1][1]   #expect value 'Printer'
$my2d[1][2] 
$my2d[1][3]


"`n #my2d[2][0] "
$my2d[2][0]   #expect value 'computer3'
$my2d[2][1]   #expect value 'Printer'
$my2d[2][2] 
$my2d[2][3]


"`n #array with no 2nd index"
$my2d[0]
$my2d[1]
$my2d[2]

2 个答案:

答案 0 :(得分:0)

我不确定您是否想要一个对象作为输出,但如果是这样,这是一个简单的方法:

$z = 0
$UserInputVar = "This,is,my,strg,to,test".Split(',')

for($z=0; $z -lt $UserInputVar.Count; $z=$z+2)
{
    [pscustomobject]@{
        1 = $UserInputVar[$z]
        2 = $UserInputVar[$z+1]
    }
}

输出

1    2   
-    -   
This is  
my   strg
to   test

编辑

再看问题,这可能就是你要找的:

$z = 0
$UserInputVar = "This,is,my,strg,to,test".Split(',')
$result = [System.Collections.Generic.List[object]]::new()
for($z=0; $z -lt $UserInputVar.Count; $z=$z+2)
{
    $result.Add(@($UserInputVar[$z],$UserInputVar[$z+1]))
}

一些测试

PS /> $result[0]
This
is

PS /> $result[0][0]
This

PS /> $result[0][1]
is

PS /> $result[0][2]

PS /> $result[1][0]
my

答案 1 :(得分:0)

您也可以使用正则表达式匹配来返回您的 2 个元素组。然后您可以将每个返回的对拆分为一个数组(因为一元运算符 ,)。然后所有返回的单个数组会自动包装到 Object[] 数组中。

$UserInputVar = "computer1,noPrinter,Computer2,Printer,Computer3,Printer"
$my2d = [regex]::Matches($UserInputVar,'[^,]+(,[^,]+|$)') |
    Foreach-Object {,($_.Value -split ',')}