遍历包含 Powershell 中值列表的哈希表

Iterate through Hashtable containing List of values in Powershell

我正在尝试在 powershell 中将键和值列表一起打印在单个字符串中。

我有这样的东西 List(dict(key:value)) (key= string , value=list<String>) 所以我的输入是这样的

dict(
 "apple"=$list1
 "banana"=$list2
 "orange"=$list3)
$list1=@('red','green')
$list2=@('yellow','black')
$list3=@('orange')

现在我想要这样的输出:

$Final_ans= apple,red_green banana,yellow_black orange,orange

如何在 PowerShell 中执行此操作?我无法像这样迭代。 我尝试了几种方法,但它给了我输出 System Collection.HashTable

假设您有一个哈希表或字典,其中所有键都是字符串,值条目是字符串数组,如下所示:

$list1 = @('red','green')
$list2 = @('yellow','black')
$list3 = @('orange')

$hashtable = @{
  "apple" = $list1
  "banana" = $list2
  "orange" = $list3
}

@{} 是 PowerShell 的哈希表(无序字典)文字的本机语法。)

您可以像这样枚举每个 key/value 对:

$hashtable.GetEnumerator() |ForEach-Object {
  $_.Key     # this will resolve to the key (ex. "apple")
  $_.Value   # this will resolve to the values (ex. @('red', 'green'))
}

因此,要构造一个类似于您描述的字符串,我们可以这样做:

@($hashtable.GetEnumerator() |ForEach-Object {
  $_.Key,($_.Value -join '_') -join ','
}) -join ' '

在这里,我们使用 -join 运算符连接具有不同分隔符的各个字符串:

$_.Value -join '_' 将值对(例如 @('red', 'green'))转换为类似于 red_green

的字符串

$_.Key,(...) -join ',' 将我们在上一步创建的key + string 变成类似apple,red_green

的字符串

@(...) -join ' ' 然后将所有这些字符串变成一个大的 space 分隔字符串 apple,red_green banana,yellow_black orange,orange