2009-10-01 26 views
25

Piszę funkcję zwracającą identyfikator, parę nazw.Czy powershell ma tablice asocjacyjne?

chciałbym zrobić coś takiego

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

jak jest to możliwe w javascript. Lub przynajmniej

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

jak to jest możliwe w php. Czy mogę to zrobić za pomocą powershell?

Odpowiedz

43

również

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

lub

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

Old komentarz, ale jak byś pętli tablicy asocjacyjnej poprzez pętli foreach? –

+3

$ tablica asocjacyjna = @ { Jane = 1 Tom = 2 Harry = 3 } foreach ($ key w $ associativeArray.Keys) { $ klucz } foreach ($ pozycja w $ associativeArray.GetEnumerator()) { "{0} = {1}" -f $ item.Key, $ item.Value } × Komentarze muszą mieć co najmniej 15 znaków. × Komentarze muszą mieć co najmniej 15 znaków długość. × Komentarze muszą mieć co najmniej 15 znaków. –

22

Tak. Użyj następującej składni, aby stworzyć im

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

Można też to zrobić:

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

Not asocjacyjną, ale równie przydatny.

-Oisin

9
#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 
0

Używam tego do śledzenia witryn/katalogów podczas pracy na wielu domenach. Jest możliwe, aby zainicjować tablicę podczas deklarowania go zamiast dodawania każdy wpis oddzielnie:

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

$url = $siteUrls[$domain] 
3

Doda także drogę do iterację hashtable, jak szukałem rozwiązania i nie znalazłem jeden ...

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

IsPublic IsSerial Name          BaseType    

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

True  True  Hashtable        System.Object  

Więc hashtable jest tablicą asocjacyjną. Ohhh.

Lub:

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