在PowerShell中,如何将两个集合与具有两部分键的表相交?

在PowerShell中,如何将两个集合与具有两部分键的表相交?,powershell,Powershell,我有如下输入数据: 福安 FOO.B 富科 酒吧 酒吧 还有一个规则表,如: (FOO=A,BAR=X)=>1#匹配 (FOO=A,BAR=Z)=>2#不匹配 (FOO=B,BAR=X)=>3#匹配 我想获取输入数据,并询问表“哪些条目与此输入数据匹配?”,然后返回第1行和第3行 我考虑过使用哈希表,其中FOO是键,值是一个哈希表,BAR是键,1是值。问题是,存在重复的密钥 在PowerShell中写这篇文章的惯用方法是什么 性能并不重要:数据集很小。以下是我试图使用的,我认为它会起作用

我有如下输入数据:

福安 FOO.B 富科

酒吧 酒吧

还有一个规则表,如:

(FOO=A,BAR=X)=>1#匹配 (FOO=A,BAR=Z)=>2#不匹配 (FOO=B,BAR=X)=>3#匹配

我想获取输入数据,并询问表“哪些条目与此输入数据匹配?”,然后返回第1行和第3行

我考虑过使用哈希表,其中FOO是键,值是一个哈希表,BAR是键,1是值。问题是,存在重复的密钥

在PowerShell中写这篇文章的惯用方法是什么


性能并不重要:数据集很小。

以下是我试图使用的,我认为它会起作用

FOO.A FOO.B FOO.C

BAR.X BAR.Y
只是一个想法。是否检查了Compare-Object cmdlet

(FOO = A, BAR = X) => 1 # match (FOO = A, BAR = Z) => 2 # no match (FOO = B, BAR = X) => 3 # match
$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
    }        
}