#string #key #match #hashtable #powershell-2.0
#строка #Клавиша #сопоставление #хеш-таблица #powershell-2.0
Вопрос:
Для Powershell 2.0:
У меня есть хеш-таблица с несколькими строками в качестве ключей. В отличие @{}.containskey
от, возможно ли найти ключ (например, "examplekey"
) с помощью подстановочных знаков (например, "*xampl*"
)?
Мне удалось выполнить то, что я хотел, составив список ключей и используя Where-Object в качестве фильтра. Но есть ли более простой способ сделать это? Я думаю, что этот метод особенно плох, когда я добавляю новые ключи, потому что мне нужно каждый раз заново создавать список.
Ответ №1:
Используйте .Keys
операторы свойств и -like
или -notlike
, которые возвращают массив ключей (или один ключ):
if ($hash.keys -notlike '*xampl*') {
$hash.example = 1
}
Храните ключи в массиве для многократных проверок:
$keys = $hash.keys
if ($keys -notlike '*xampl*') {
$hash.example = 1
}
if ($keys -notlike '*foo*') {
$hash.example = 1
}
Цепочка сравнений:
if ($hash.keys -notlike '*xampl*' -notlike '*123*') {
$hash.example = 1
}
Или используйте регулярное выражение, если ключей много, и вы хотите выполнить много проверок:
if ($hash.keys -join "`n" -match '(?mi)xampl|foo|bar|^herpd |wDerp$|^and$|bsob|on') {
echo 'Already present'
} else {
$hash.foo123 = 'bar'
# ......
}
(?mi)
означает, что в конечном итоге чувствительный к регистру режим: каждый ключ проверяется индивидуально.