У меня есть три таблицы хэша, заполненные доступными «задачами» для использования в разных контекстах, и у меня есть три одинаковых бита кода, кроме каждого из них используется другая хеш-таблица. Не идеально, и я хотел бы преобразовать это в функцию, но я борюсь с тем, как ссылаться на правильную хэш-таблицу.Используйте переменную, чтобы определить, какую другую переменную использовать
Так, в качестве примера, у меня есть это:
if ($global:machineTasks.ContainsKey($taskType))...
, который повторяется три раза, для $machineTasks
, $userTasks
и $relocateTasks
. Одним из способов подойти к нему, чтобы использовать switch
и временный Hashtable, примерно так:
switch ($context) {
machine {
$workingTasks = $global:machineTasks
}
user {
$workingTasks = $global:userTasks
}
relocate {
$workingTasks = $global:relocateTasks
}
}
if ($workingTasks.ContainsKey($taskType))...
и работает нормально, но если Hashtables был действительно большой, что делает много избыточных данных. Итак, есть ли способ установить переменную, которая просто содержит имя используемой хеш-таблицы, а не всю хэш-таблицу, а затем использовать ее в if
? В моем случае это, вероятно, не нужно, так как хэш-таблицы на самом деле довольно малы, менее 50 записей и каждая запись меньше 20 символов. Но, как упражнение по программированию, я хотел бы сделать это «правильно», и я предполагаю, что дублирующие данные не являются «правильными».
это не дублируя эти таблицы просто создать ссылку на них Вы можете использовать 'Get-Variable' и хранить только имя, но это по-прежнему вызывает значение.. из памяти. – Matt
Ага! Я забыл, что массивы и хеш-таблицы всегда всегда ByRef. Это, безусловно, дает решение здесь. И, я думаю, в ситуации, которая является просто переменной, копия ByVal не является серьезной проблемой. – Gordon