我有三个哈希表填充了可用的"任务"在不同的上下文中使用,我有三个相同的代码位,除了每个代码使用不同的哈希表。不理想,我想将其转换为函数,但我正在努力如何引用正确的哈希表。
所以,作为一个例子,我有这个:
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个字符。但是,作为一项编程练习,我想做到这一点"正确',我认为复制数据并不是正确的。
答案 0 :(得分:1)
除非我误解了某些内容,否则你可以简单地将哈希表嵌套到另一个哈希表中:
$tasks = @{
'machine' = @{
'typeA' = ...
...
}
'user' = @{
'typeB' = ...
...
}
'relocate' = @{
'typeC' = ...
...
}
}
并像这样访问它们:
if ($tasks[$context].ContainsKey($taskType)) {
...
}