我被困住了。
我想创建一个具有以下结构的多维数组
$x[index]['word']="house"
$x[index]['number']=2,5,7,1,9
其中index是从0到... n
的第一个维度第二维有两个字段“word”和“number”
并且这两个字段中的每一个都包含一个数组(第一个包含字符串,第二个包含数字)
我不知道如何声明这个$ x
我试过
$x = @(()),@(@()) - doesn't work
或
$x= ("word", "number"), @(@()) - doesn't work either
或
$x = @(@(@(@()))) - nope
然后我想像这样使用这个数组:
$x[0]["word"]= "bla bla bla"
$x[0]["number]= "12301230123"
$x[1]["word"]= "lorem ipsum"
$x[2]["number]=...
$x[3]...
$x[4]...
最常见的错误是
数组分配失败,因为索引“0”超出范围。
无法索引System.Char / INt32
类型的对象
我想用arrays[][]
或jaws @但没有.net [,]来完成这个。
我想我错过了什么。
答案 0 :(得分:1)
如果我理解正确,你正在寻找一组哈希表。您可以在对象数组中存储您想要的任何内容,因此存储可以使用单词或数字作为键进行搜索的哈希表。例如:
$ht1 = @{}
$ht1["myword"] = 2
$ht1["23"] = "myvalue"
$ht2 = @{}
$ht2["1"] = 12301230123
$arr = @($ht1,$ht2)
PS > $arr[1]["1"]
12301230123
PS > $arr[0]["myword"]
2
PS > $arr[0]["23"]
myvalue
如果您知道需要多少,可以使用快捷方式创建它:
#Create array of 100 elements and initialize with hashtables
$a = [object[]](1..100)
0..($a.Length-1) | % { $a[$_] = @{ 'word' = $null; 'number' = $null } }
#Now you have an array of 100 hastables with the keys initialized. It's ready to recieve some values.
PS > $a[99]
Name Value
---- -----
number
word
如果您以后需要添加另一对,您只需使用:
$a += @{ 'word' = $yourwordvar; 'number' = $yournumbervar }
答案 1 :(得分:0)
您可以创建一个数组,并使用哈希表初始化它:
$x=@(@{})*100;
0..99 | foreach {$x[$_]=@{}};
$x[19]["word"]="house";
$x[19]["number"]=25719;
你想要一个大数组,例如长度为100.请注意括号中的差异!
您需要第二步,因为在上一个命令中,哈希表的指针被复制了100次......而您不希望这样:)
现在测试一下:
$x[19]["number"];
25719
$[19]["word"];
house