如何在Powershell中将具有不同值的相同键添加到哈希表? 1将值数组添加到特定的哈希表键: 2或者您可以创建哈希表Key Value Pairs的列表数组

如何解决如何在Powershell中将具有不同值的相同键添加到哈希表? 1将值数组添加到特定的哈希表键: 2或者您可以创建哈希表Key Value Pairs的列表数组

这是我使用哈希表数组的代码

$podnumbers = @(1,3,1)

$podInfo = $null
$buffer = 0
$podarray = foreach ($pd in $podnumbers) {
    $podinfo = @()
    for($i=0;$i -lt $pd;$i = $i+1) {
    $pod = Read-Host -Prompt "Assign the pod numbers for",$esxarray[$buffer]
    Write-Output `n
    }
    @{$pd = $pod}
$buffer = $buffer + 1
}

我为$ pod提供的输入是1 = 1; 3 = 2,4,6; 1 = 3

我希望我的哈希表数组如下所示,

Key : 1
Value : 1
Name : 1

Key : 3
Value : 2,6
Name : 3

Key : 1
Value : 3
Name : 1

但是我得到的实际输出

Key : 1
Value : 1
Name : 1

Key : 3
Value : 2
Name : 3

Key : 3
Value : 4
Name : 3

Key : 3
Value : 6
Name : 3

Key : 1
Value : 3
Name : 1

解决方法

如果要向同一个键添加多个值,则需要测试该键是否已经存在并采取相应措施:

$keys = 1,2,3,1
$value = 'a value'
$hashtable = @{}

foreach($key in $keys){
  if(-not $hashtable.ContainsKey($key)){
    # First time we see this key,let's make sure the value is a resizable array
    $hashtable[$key] = @()
  }

  # Now we can safely add values regardless of whether the key already exists
  $hashtable[$key] += $value
}
,

为补充@Matthias中的答案:
hash table中不能有重复的键。这是设计使然。哈希表包含一个基于binary search algorithm的唯一键的列表,其中每个键都链接到特定的对象(值)。

两个解决方法:

1。将值数组添加到特定的哈希表键:

$Keys = 1,3
$Values = 'a'..'d'
$HashTable = @{}
$i = 0
foreach($key in $Keys){ [array]$HashTable[$Key] += $Values[$i++] }

迭代
缺点是您会丢失项目的顺序(无论您是否仅由于某些值共享单个键而使用ordered字典)。

Foreach ($Key in $Hashtable.Keys) {
    Foreach ($Value in @($Hashtable[$Key])) {
        Write-Host $Key '=' $Value
    }
}

3 = d
2 = b
2 = c
1 = a

搜索
优点是,这些项目已进行了二进制索引,因此可以快速找到。

$SearchKey = 2
Foreach ($Value in @($Hashtable[$SearchKey])) {
    Write-Host $SearchKey '=' $Value
}

2 = b
2 = c

2。或者您可以创建哈希表(Key Value Pairs)的列表(数组)

$Keys = 1,3
$Values = 'a'..'d'
$i = 0
$KeyValuePairs = foreach($key in $keys){ @{ $Key = $Values[$i++] } }

迭代
优点是物品会保持秩序。
(请注意,您必须调用GetEnumerator()方法两次)

$KeyValuePairs.GetEnumerator().GetEnumerator() | Foreach-Object {
    Write-Host $_.Key '=' $_.Value
}

1 = a
2 = b
2 = c
3 = d

搜索
缺点是搜索项目的速度较慢,而搜索的范围较广。

$SearchKey = 2
$KeyValuePairs.GetEnumerator().GetEnumerator() | 
    Where-Object Key -eq $SearchKey | Foreach-Object {
    Write-Host $_.Key '=' $_.Value
}

2 = b
2 = c
,

由于您重新定义的新目标比最初出现的问题更具体,因此我在另一个答案中进行此操作。相反,应将每个响应分配给一个相关的podnumber。

脚本:

$podnumbers = @(1,1)
$Inputs = 1,4,6,3
$c = 0
$podarray = foreach ($pd in $podnumbers) {
    $podinfo = @{}
    for($i=0; $i -lt $pd; $i = $i+1) {
        # $pod = Read-Host -Prompt "Assign the pod numbers for",$esxarray[$buffer]
        [array]$podinfo[$pd] += $Inputs[$c++]
    }
    $podinfo
}
$podarray

输出:

Name                           Value
----                           -----
1                              {1}
3                              {2,6}
1                              {3}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?