2009-06-17 48 views
0

J'ai données d'entrée comme celui-ci:Comment puis-je croiser deux collections avec une table avec une clé en deux parties dans PowerShell?

 
FOO.A 
FOO.B 
FOO.C

BAR.X BAR.Y

et une table de règles comme:

 
    (FOO = A, BAR = X) => 1 # match 
    (FOO = A, BAR = Z) => 2 # no match 
    (FOO = B, BAR = X) => 3 # match 

Je veux prendre les données d'entrée, et demander à la table « que les entrées correspondent à ce entrer les données? ", et récupérer les lignes 1 & 3.

J'ai pensé à utiliser des tables de hachage où FOO est la clé, et la valeur est un hasht capable avec BAR comme clé, et 1 comme valeur. Le problème est, il y a des clés en double.

Quelle est la manière idiomatique d'écrire ceci dans PowerShell?

Les performances ne sont pas critiques: les ensembles de données sont petits.

Répondre

0

Voici ce que je suis en train d'utiliser, et je pense que cela fonctionnera

$table = @(
    @{ 
     Foo = "A" 
     Bar = "X 
     Value = 1 
    }, 
    @{ 
     Foo = "A" 
     Bar = "Y" 
     Value = 2 
    }, 
    @{ 
     Foo = "B" 
     Bar = "Z" 
     Value = 3 
    } 
) 

$table | foreach { 
    $row = $_ 

    $foo = $input.Foos | where { 
     $_.Name -eq $row.Foo 
    } 

    $bar = $input.Bars | where { 
     $_.Name -eq $row.Bar 
    } 

    if ($foo -and $bar) {   
     # processing 
    }   
} 
0

Juste une pensée. Avez-vous vérifié la cmdlet Compare-Object?

Questions connexes