【发布时间】:2017-09-27 17:23:01
【问题描述】:
我正在尝试找到返回存储在数组中的哈希表的最佳方法,匹配另一个哈希表的所有属性,该哈希表与数组分开。
例如,我有以下 Array 和 Hash Table 变量:
$myarr = @(
@{"first" = "A";"second" = "B";"third" = "C";"fourth" = "D";"fifth" = "E"},
@{"first" = "M";"second" = "B";"third" = "C";"fourth" = "D";"fifth" = "E";"sixth"="F"},
@{"first" = "A";"second" = "B";"third" = "C";"fourth" = "D";"fifth" = "Z"})
$crit = @{"first"="A";"third"="C"}
我需要一种方法来返回存储在数组中的每个完整哈希表,其中所有来自$crit 的属性都匹配。在此示例中,我希望看到 $myarr[0] 和 $myarr[2] 返回。
我可以通过一个一个循环$crit的属性来实现这一点,并将它们与数组中的每个哈希表进行比较,如下所示,但我想看看是否有更好的方法来比较哈希表我想不通,类似于Compare-Object with Arrays。
ForEach ($hash in $myarr) {
$match = $true
ForEach ($key in $crit.Keys) {If ($hash.$key -ne $crit.$key) {$match = $false;Break}}
If ($match) {$hash}}
这样做的最终目标是在内存使用量最少的情况下进行比较,因为现实世界的应用程序将比较数十万个这样的数组,其中包含数百个哈希表,它们都有 100 多个属性。显然,我们感谢您在正确的方向上提供的任何帮助,但我的目标是尽可能简化这种比较。
【问题讨论】:
-
这是一对多比较过程,还是多对多?
-
@mjolinor 一对多;一个像 $crit 这样的哈希,与像 $myarr 这样的许多数组相比。
标签: arrays powershell hash compare