代码之家  ›  专栏  ›  技术社区  ›  Stefan Stoychev

嵌套属性上的筛选器ArrayList

  •  0
  • Stefan Stoychev  · 技术社区  · 7 年前

    我有一个PowerShell ArrayList ( $displayObjects )其中包括:

    Name  ID  Tags
    ----  --  ----
    Test1 123 {@{id=4567; name=test1;}}
    Test2 345 {@{id=4567; name=test1;}, @{id=6789; name=test2}}
    Test3 567 {@{id=4567; name=test1;}, @{id=6789; name=test2}, @{id=7890; name=test3}}
    

    另一个:

    $filter = @('test1', 'test2')
    

    以及过滤 $显示对象 ( Tags.name )基于 $filter 数组。

    因此,在上面的情况下,结果应该只包含第2行和第3行(从 $显示对象 )

    我已经尝试了思考和测试 $displayObjects | Where-Object ... 但想不出一种方法,如何在那里循环。有什么建议吗?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Ansgar Wiechers    7 年前

    类似的事情可能会奏效:

    ... | Where-Object {
        $a = @($_.Tags.name)
        ($filter | Where-Object {$a -contains $_}).Count -eq $filter.Count
    }
    

    可能有一种更有效的方法 LINQ ( like this ?)但我对这方面还不够精通。

        2
  •  0
  •   TobyU    7 年前

    这应该有效。不过,这可能不是最有效的方法。

    $displayObjects | Where-Object { 
        $tags = [string]$_.Tags
        $returnObject = $true
        $filter | foreach {
            if($tags -notlike "*$_*"){
                $returnObject = $false
            }
        }
        $returnObject
    }
    
    推荐文章