powershell 有关联数组吗?

Posted

技术标签:

【中文标题】powershell 有关联数组吗?【英文标题】:Does powershell have associative arrays? 【发布时间】:2010-12-03 03:00:27 【问题描述】:

我正在编写一个返回 id、name 对的函数。

我想做类似的事情

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

喜欢在 javascript 中是可能的。或者至少

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

like 在 php 中是可能的。我可以用 powershell 做到这一点吗?

【问题讨论】:

【参考方案1】:

从 JSON 字符串创建

$people= '[

"name":"John", 
"phone":"(555) 555-5555"
,
"name":"Mary", 
"phone":"(444) 444-4444"

]';

# Convert String To Powershell Array
$people_obj = ConvertFrom-Json -InputObject $people;

# Loop through them and get each value by key.
Foreach($person in $people_obj ) 
    echo $person.name;

【讨论】:

【参考方案2】:
PS C:\> $a = @                                                      
PS C:\> $a.gettype()                                                  

IsPublic IsSerial Name                                     BaseType            

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

True     True     Hashtable                                System.Object       

所以哈希表是一个关联数组。呵呵。

或者:

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

【讨论】:

【参考方案3】:

还将添加遍历哈希表的方法,因为我正在寻找解决方案但没有找到...

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

【讨论】:

唯一提到分号;分隔符的答案。【参考方案4】:

我在处理多个域时使用它来跟踪站点/目录。可以在声明数组时初始化数组,而不是单独添加每个条目:

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

$url = $siteUrls[$domain]

【讨论】:

【参考方案5】:
#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

【讨论】:

【参考方案6】:

还有

$a = @'foo'='bar'

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

【讨论】:

旧评论,但是如何通过 foreach 循环遍历关联数组? $associativeArray=@ Jane=1 Tom=2 Harry=3 foreach($associativeArray.Keys 中的$key) $key foreach($associativeArray.GetEnumerator() 中的$item) "0=1" -f $item.Key, $item.Value ×评论至少15个字符×评论至少15个字符×评论至少15个字符长度。 $associativeArray=@ Jane=1 Tom=2 Harry=3 给了我Unexpected token 'Tom=2' in expression or statement. 有效的是$associativeArray=@ Jane=1; Tom=2; Harry=3 @stib,每个值必须要么在单独的行上(一个简单的 return 就可以了),或者像你一样使用分隔符。单独的行便于阅读。【参考方案7】:

您也可以这样做:

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

不是关联数组,但同样有用。

-奥辛

【讨论】:

更简单的是$q, $a = @("meaning of life?", 42)【参考方案8】:

是的。使用以下语法创建它们

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

【讨论】:

以上是关于powershell 有关联数组吗?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript Object 只是一个关联数组吗?

Ruby 中的关联数组

非关联数组的术语是啥?

PHP中如何给关联数组的key和value转码?

如何从关联数组中只打印一次部门名称

VBA中的哈希表/关联数组