我要做的是动态创建数组变量名,然后使用循环,根据哈希表值等于计数器变量将对象添加到其相关数组。
$hshSite = @{} # Values like this CO,1 NE,2 IA,3
$counter = $hshSite.count
For($i = $counter; $i -gt 0; $i--) {
New-Variable -Name "arr$i" -Value @()
}
如果$ counter = 3,我会创建数组$ arr1,$ arr2,$ arr3
$csv = Import-CSV....
ForEach ($x in $csv) {
#if $hshSite.Name = $x.location (ie CO), look up hash value (1),
and add the object to $arr1. If $hshSite.Name = NE, add to $arr2
我尝试使用New-Variable创建动态数组,但尝试添加到这些数组时遇到问题。是否可以将2个变量名称连接成一个变量名称?所以拿$ arr + $ i来形成$ arr1和$ arr2以及$ arr3,然后我基本上可以做$ arr0 + = $ _
最终目标是基于CO,NE,IA对事物进行分组,以进行进一步的排序/分组/处理。而且我愿意接受其他有关实现这一目标的想法。谢谢你的帮助!
答案 0 :(得分:3)
只需让哈希表为数组赋值,并直接将值累加到它们中:
$Sites = 'CO','NE','IA'
$hshSite = @{}
Foreach ($Site in $Sites){$hshSite[$Site] = @()}
ForEach ($x in $csv)
{
$hshSite[$x.location] += <whatever it is your adding>
}
如果csv中有很多条目,您可以考虑将这些值创建为arraylists而不是数组。
$Sites = 'CO','NE','IA'
$hshSite = @{}
Foreach ($Site in $Sites){ $hshSite[$Site] = New-Object Collections.Arraylist }
ForEach ($x in $csv)
{
$hshSite[$x.location].add('<whatever it is your adding>') > $nul
}
答案 1 :(得分:2)
您可以使用Get-Variable cmdlet将项添加到动态命名的数组变量中。类似于以下内容:
$MyArrayVariable123 = @()
$VariableNamePrefix = "MyArrayVariable"
$VariableNameNumber = "123"
$DynamicallyRetrievedVariable = Get-Variable -Name ($VariableNamePrefix + $VariableNameNumber)
$DynamicallyRetrievedVariable.Value += "added item"
运行上面的代码后,$MyArrayVariable123
变量将是一个包含单个字符串added item
的数组。