Подтвердить что ты не робот

Имеет ли powershell ассоциативные массивы?

Я пишу функцию, которая возвращает пару id, name.

Я хотел бы сделать что-то вроде

$a = get-name-id-pair()
$a.Id
$a.Name

как это возможно в javascript. Или, по крайней мере,

$a = get-name-id-pair()
$a["id"]
$a["name"]

как возможно в php. Могу ли я сделать это с помощью powershell?

4b9b3361

Ответ 1

и

$a = @{'foo'='bar'}

или

$a = @{}
$a.foo = 'bar'

Ответ 2

Да. Используйте следующий синтаксис для их создания

$a = @{}
$a["foo"] = "bar"

Ответ 3

#Define an empty hash
$i = @{}

#Define entries in hash as a number/value pair - ie. number 12345 paired with Mike is   entered as $hash[number] = 'value'

$i['12345'] = 'Mike'  
$i['23456'] = 'Henry'  
$i['34567'] = 'Dave'  
$i['45678'] = 'Anne'  
$i['56789'] = 'Mary'  

#(optional, depending on what you're trying to do) call value pair from hash table as a variable of your choosing

$x = $i['12345']

#Display the value of the variable you defined

$x

#If you entered everything as above, value returned would be:

Mike

Ответ 4

Будет также добавлен способ итерации через хэш-таблицу, поскольку я искал решение и не нашел...

$c = @{"1"="one";"2"="two"} 
foreach($g in $c.Keys){write-host $c[$g]} #where key = $g and value = $c[$g]

Ответ 5

PS C:\> $a = @{}                                                      
PS C:\> $a.gettype()                                                  

IsPublic IsSerial Name                                     BaseType            

-------- -------- ----                                     --------            

True     True     Hashtable                                System.Object       

Таким образом, хэш-таблица является ассоциативным массивом. Оооо.

Или:

PS C:\> $a = [Collections.Hashtable]::new()

Ответ 6

Вы также можете сделать это:

function get-faqentry { "meaning of life?", 42 }
$q, $a = get-faqentry 

Не ассоциативный массив, но в равной степени полезен.

-Oisin

Ответ 7

Я использую это для отслеживания сайтов/каталогов при работе с несколькими доменами. Можно инициализировать массив при его объявлении, а не добавлять каждую запись отдельно:

$domain = $env:userdnsdomain
$siteUrls = @{ 'TEST' = 'http://test/SystemCentre' 
               'LIVE' = 'http://live/SystemCentre' }

$url = $siteUrls[$domain]