更新:我正在尝试将用户输入值(字符串(放入2d数组中。出于测试目的,我为变量分配了一个字符串。目标:稍后,我希望我的程序查看数组第1列的每一行,并执行类似于安装打印机软件(如果它显示"打印机"(和不安装软件(如果没有打印机(的操作。我可以对1d数组执行此操作,但我想要1到10行中的任何一行。这就是为什么2d阵列的想法会很复杂。
我想学会这样做,而不是要求你写我所有的代码。非常感谢。
这是我的密码。
#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]
我不确定你是否想要一个对象作为输出,但如果想要,这是一个简单的方法:
$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
您还可以使用正则表达式匹配来返回由2个元素组成的组。然后,您可以将这些返回的对中的每一个拆分为单个数组(因为一元运算符,
(。然后将所有返回的单个数组自动包装到Object[]
数组中。
$UserInputVar = "computer1,noPrinter,Computer2,Printer,Computer3,Printer"
$my2d = [regex]::Matches($UserInputVar,'[^,]+(,[^,]+|$)') |
Foreach-Object {,($_.Value -split ',')}