使用变量来标识要使用的其他变量

时间:2015-07-06 13:42:07

标签: variables powershell reference

我有三个哈希表填充了可用的"任务"在不同的上下文中使用,我有三个相同的代码位,除了每个代码使用不同的哈希表。不理想,我想将其转换为函数,但我正在努力如何引用正确的哈希表。

所以,作为一个例子,我有这个:

if ($global:machineTasks.ContainsKey($taskType))...
对于$machineTasks$userTasks$relocateTasks

重复了三次。接近它的一种方法是使用switch和临时哈希表,如下所示:

switch ($context) {
        machine {
            $workingTasks = $global:machineTasks
        }
        user {
            $workingTasks = $global:userTasks
        }
        relocate {
            $workingTasks = $global:relocateTasks
        }
    }
if ($workingTasks.ContainsKey($taskType))...

并且可以正常工作,但如果哈希表变得非常大,则会产生大量冗余数据。那么,有没有办法设置一个只包含要使用的哈希表名称的变量,而不是整个哈希表,然后在if中使用它? 在我的情况下,可能不需要,因为哈希表实际上非常小,少于50个条目,每个条目少于20个字符。但是,作为一项编程练习,我想做到这一点"正确',我认为复制数据并不是正确的。

1 个答案:

答案 0 :(得分:1)

除非我误解了某些内容,否则你可以简单地将哈希表嵌套到另一个哈希表中:

$tasks = @{
  'machine' = @{
    'typeA' = ...
    ...
  }
  'user' = @{
    'typeB' = ...
    ...
  }
  'relocate' = @{
    'typeC' = ...
    ...
  }
}

并像这样访问它们:

if ($tasks[$context].ContainsKey($taskType)) {
  ...
}