我试图使用powershell将哈希表添加到哈希表中。但是,我得到了以下错误:
Item has already been added. Key in dictionary: 'Dev' Key being added: 'Dev'
这是我的密码:
$colors = @("black","white","yellow","blue")
$Applications=@{}
Foreach ($i in $colors)
{
$Applications += @{
Colour = $i
Prod = 'SrvProd05'
QA = 'SrvQA02'
Dev = 'SrvDev12'
}
}我做错了什么?
发布于 2018-06-05 17:54:57
我想你想要的是这样的东西:
$colors = @("black","white","yellow","blue")
$Applications=@{}
Foreach ($i in $colors)
{
$Applications[$i] = @{
Colour = $i
Prod = 'SrvProd05'
QA = 'SrvQA02'
Dev = 'SrvDev12'
}
}我还将指出,Hashtable经常需要进行防御处理。每个键必须是唯一的,但值不一定是唯一的。以下是处理这些问题的典型方法:
$colors = @("black","white","yellow","blue")
$Applications=@{}
Foreach ($i in $colors)
{
if($Applications.ContainsKey($i)){
#Do things here if there is already an entry for this key
}else{
$Applications[$i] = @{
Colour = $i
Prod = 'SrvProd05'
QA = 'SrvQA02'
Dev = 'SrvDev12'
}
}
}发布于 2018-06-05 20:13:14
EBGreen's helpful answer为您可能要做的事情提供了一个解决方案。
为了补充这一点,请解释为什么您的代码失败:
+ “添加”两个哈希表时,它们的条目是 merged:换句话说: RHS的条目被添加到LHS哈希表中。
(从技术上讲,使用合并的条目创建一个新实例。)由于您的循环多次尝试将具有相同键的哈希表直接合并到现有的哈希表中,所以您的第二次循环迭代总是失败。
您可以更简单地验证这一点:
$Applications = @{} # create empty hashtable.
# Merge a hashtable literal into $Applications.
# This works fine, because the two hashtables have no keys in common.
$Applications += @{ first = 1; second = 2 }
# $Application now contains the following: @{ first = 1; second = 2 }
# If you now try to add a hashtable with the same set of keys again,
# the operation invariably fails due to duplicate keys.
$Applications += @{ first = 10; second = 20 } # FAILS
# By contrast, adding a hashtable with unique keys works fine:
$Applications += @{ third = 3; fourth = 4 } # OK
# $Application now contains: @{ first = 1; second = 2; third = 3; fourth = 4 }发布于 2022-05-20 14:16:09
我正在寻找一种方法来做某种“枚举列表”,而且由于我对PowerShell相当陌生,我唯一能想到的就是"HashTable of HashTables!“。
无法找到一种方法来做到这一切“内联”,我得到了一些“不能添加一个空键到一个哈希表”错误。经过一些实验,我最终得到了这个结果,完全按照我的意愿工作:
$Enums = @{}
$Enums.Frequency = @{
Daily = "daily"
Weekly = "weekly"
Monthly = "monthly"
}
$Enums.SomethinElse = @{
Thing1 = "dflskdjf"
Thing2 = 12
Thing3 = $null
}然后您可以简单地使用它。
$Enums.SomethinElse.Thing2或者(如果将它添加到全局变量中)
$Global:Enums.Frequency.Daily它与提供的示例不完全相同,但与主题直接一致,因此我希望它能帮助一些人在这里结束:)
https://stackoverflow.com/questions/50706016
复制相似问题