创建动态变量数组名称,然后向其添加对象

时间:2014-02-21 16:43:45

标签: powershell dynamic-arrays

我要做的是动态创建数组变量名,然后使用循环,根据哈希表值等于计数器变量将对象添加到其相关数组。

$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对事物进行分组,以进行进一步的排序/分组/处理。而且我愿意接受其他有关实现这一目标的想法。谢谢你的帮助!

2 个答案:

答案 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的数组。