首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向哈希表中添加哈希表

向哈希表中添加哈希表
EN

Stack Overflow用户
提问于 2018-06-05 17:42:14
回答 3查看 9.6K关注 0票数 1

我试图使用powershell将哈希表添加到哈希表中。但是,我得到了以下错误:

Item has already been added. Key in dictionary: 'Dev' Key being added: 'Dev'

这是我的密码:

代码语言:javascript
复制
$colors = @("black","white","yellow","blue")

$Applications=@{}

Foreach ($i in $colors)
{
    $Applications += @{
        Colour = $i
        Prod = 'SrvProd05'
        QA   = 'SrvQA02'
        Dev  = 'SrvDev12'
    }
}

我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-05 17:54:57

我想你想要的是这样的东西:

代码语言:javascript
复制
$colors = @("black","white","yellow","blue")
$Applications=@{}
Foreach ($i in $colors)
{
    $Applications[$i] = @{
        Colour = $i
        Prod = 'SrvProd05'
        QA   = 'SrvQA02'
        Dev  = 'SrvDev12'
    }
}

我还将指出,Hashtable经常需要进行防御处理。每个键必须是唯一的,但值不一定是唯一的。以下是处理这些问题的典型方法:

代码语言:javascript
复制
$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'
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-06-05 20:13:14

EBGreen's helpful answer为您可能要做的事情提供了一个解决方案。

为了补充这一点,请解释为什么您的代码失败:

  • 当您使用+ “添加”两个哈希表时,它们的条目是 merged:换句话说: RHS的条目被添加到LHS哈希表中。 (从技术上讲,使用合并的条目创建一个新实例。)
  • 但是--通过明智的设计--只有当哈希表在公共的中没有没有键时,才会执行合并;否则,您将得到您看到的错误消息,抱怨重复的键。 如果没有此保障措施,如果与重复条目相关的值不同,则会丢失数据。

由于您的循环多次尝试将具有相同键的哈希表直接合并到现有的哈希表中,所以您的第二次循环迭代总是失败。

您可以更简单地验证这一点:

代码语言:javascript
复制
$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 }
票数 2
EN

Stack Overflow用户

发布于 2022-05-20 14:16:09

我正在寻找一种方法来做某种“枚举列表”,而且由于我对PowerShell相当陌生,我唯一能想到的就是"HashTable of HashTables!“。

无法找到一种方法来做到这一切“内联”,我得到了一些“不能添加一个空键到一个哈希表”错误。经过一些实验,我最终得到了这个结果,完全按照我的意愿工作:

代码语言:javascript
复制
$Enums = @{}
$Enums.Frequency = @{
    Daily = "daily"
    Weekly = "weekly"
    Monthly = "monthly"
}
$Enums.SomethinElse = @{
    Thing1 = "dflskdjf"
    Thing2 = 12
    Thing3 = $null
}

然后您可以简单地使用它。

代码语言:javascript
复制
$Enums.SomethinElse.Thing2

或者(如果将它添加到全局变量中)

代码语言:javascript
复制
$Global:Enums.Frequency.Daily

它与提供的示例不完全相同,但与主题直接一致,因此我希望它能帮助一些人在这里结束:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50706016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档