2009-10-01 8 views
25

Je suis en train d'écrire une fonction qui retourne un identifiant, une paire de noms.Est-ce que PowerShell a des tableaux associatifs?

Je voudrais faire quelque chose comme

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

LIKE est possible en javascript. Ou au moins

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

comme c'est possible en php. Puis-je faire ça avec PowerShell?

Répondre

43

également

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

ou

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

Vieux commentaire, mais comment boucle vous à travers un tableau associatif via une boucle foreach? –

+3

$ tableau associatif = @ { Jane = 1 Tom = 2 Harry = 3 } foreach ($ key dans associativeArray.Keys $) { $ key } foreach ($ article en $ associativeArray.GetEnumerator()) { "{0} = {1}" -f $ item.Key, $ item.Value } × Les commentaires doivent contenir au moins 15 caractères. × Les commentaires doivent contenir au moins 15 caractères dans longueur. × Les commentaires doivent comporter au moins 15 caractères. –

22

Oui. Utilisez la syntaxe suivante pour les créer

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

Vous pouvez aussi le faire:

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

Pas tableau associatif, mais aussi comme utile.

-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

Je l'utiliser pour garder la trace des sites/répertoires lorsque vous travaillez sur plusieurs domaines. Il est possible d'initialiser le tableau lors de la déclaration plutôt que d'ajouter chaque entrée séparément:

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

$url = $siteUrls[$domain] 
3

ajoutera également la voie à itérer Hashtable, comme je cherchais la solution et n'a pas trouvé un ...

$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  

Ainsi, une table de hachage est un tableau associatif. Ohhh.

Ou:

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