Ich versuche den besten Weg zu finden, die in einem Array gespeicherten Hashtabellen zurückzugeben, die alle Eigenschaften einer anderen Hashtabelle entsprechen, die separat ist aus dem Array.Wie man Eigenschaften einer Hashtabelle mit einem Array von Hashtabellen in Powershell vergleicht
Zum Beispiel, ich habe die folgende Array und Hash Table Variablen:
$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"}
Ich brauche eine Art und Weise jede gesamte Hash Table in dem Array gespeichert zurückzukehren, wo alle Eigenschaften von $crit
abgestimmt sind. In diesem Beispiel möchte ich $myarr[0]
und $myarr[2]
zurückgegeben werden.
Ich kann dies erreichen, indem ich nacheinander die Eigenschaften von $crit
durchlaufen und sie mit jeder Hash-Tabelle im Array vergleichen, aber ich wollte sehen, ob es einen besseren Weg gibt, die Hash-Tabellen zu vergleichen kann nicht herausfinden, ähnlich wie Compare-Object
mit Arrays.
ForEach ($hash in $myarr) {
$match = $true
ForEach ($key in $crit.Keys) {If ($hash.$key -ne $crit.$key) {$match = $false;Break}}
If ($match) {$hash}}
Das Endziel hierfür ist der Vergleich mit der geringsten Menge an Speichernutzung zu tun, da die reale Anwendung sein wird Hunderttausende dieser Arrays zu vergleichen, mehrere hundert Hash Tables enthält, die alle 100 haben + Eigenschaften. Natürlich wird jede Hilfe in die richtige Richtung geschätzt, aber mein Ziel ist es, diesen Vergleich so weit wie möglich zu optimieren.
Dies ist ein one-to-many-Vergleichsprozess oder many-to-many? – mjolinor
@mjolinor eins-zu-viele; Ein Hash wie $ crit, verglichen mit vielen Arrays wie $ myarr. –