哈希表

时间:2017-06-12 16:11:20

标签: powershell hashtable

我知道这是不可能的,但我已经管理过了。从SQL查询中,我拉了1,2或3个链接到设备的电子邮件地址。我将它们扔进哈希表中。从那里,我循环,检查第二个哈希表,它由第一个表中的值组成。如果有一个电子邮件地址,则有效,但如果有多个电子邮件地址,则表示找不到匹配项,并且正在创建新密钥。

$DeviceList = @{
    "Device1" = "Sally.Johnson@Domain.com";
    "Device7" = "Sally.Johnson@Domain.com";
    "Device8" = "Sally.Johnson@Domain.com";
    "Device2" = "Bob.Davis@domain.com", "Jane.Doe@domain.com";
    "Device3" = "Bob.Davis@domain.com", "Jane.Doe@domain.com";
    "Device4" = "Jane.Doe@domain.com", "Sally.Johnson@domain.com", "Bob.Davis@domain.com";
    "Device5" = "Jane.Doe@domain.com", "Sally.Johnson@domain.com", "Bob.Davis@domain.com";
    "Device6" = "Jane.Doe@domain.com", "Sally.Johnson@domain.com", "Bob.Davis@domain.com"
}
$CompletedDevices = @{}

foreach ($Device in $DeviceList.GetEnumerator()) {
    $Devicename = ($Device.Key).ToLower()
    $OwnerEmail = ($Device.Value).ToLower()

    if ($CompletedDevices.ContainsKey($OwnerEmail)) {
        $CompletedDevices.$OwnerEmail += "$Devicename"
    } else {
        $CompletedDevices += @{$OwnerEmail = " ", $Devicename}
    }
}

$CompletedDevices

脚本运行后,如果我只运行$CompletedDevices += @{$owneremail = " ", $Devicename},它会给我一个错误

  

项目已添加

但它没有在ContainsKey()支票中找到它,而是将其添加为第二个三分之一或五十分之一的重复密钥。

这是此示例的最终结果:

enter image description here

上面的例子复制了这个问题。我真的希望我只是忽略了一些非常简单的东西。

1 个答案:

答案 0 :(得分:0)

MathiasR.Jessen 将答案放在评论中:

“你没有生成重复的密钥 - 你在循环中复制值数组,哈希表将接受结果对象作为键,而不是按值而是通过标识。

$CompletedDevices.GetEnumerator()|%{"$($_.Key): $($_.Key.GetHashCode())" }

$OwnerEmail = ($Device.Value).ToLower()更改为$OwnerEmail = "$($Device.Value)".ToLower()

这两个解决方案对我帮助很大,谢谢!