更新:我正在尝试将用户输入值(字符串)放入二维数组中。出于测试目的,我为变量分配了一个字符串。 目标:稍后我希望我的程序查看阵列的第 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]
答案 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 ',')}