2017-10-01 16 views
2

は次のように含まれていますcontainsを使用してオブジェクトプロパティの値と一致させることはできますか?私が使用することができます

myArr= 'aaa','bbb','ccc' 
myArr -contains 'aaa' 

しかし、私は、オブジェクトの配列にそれを使用することができますか?私はオブジェクトの配列を持っていると、彼らの 'someProp'プロパティの1つがいくつかの値と等しいかどうかを知りたいですか?

これは動作しませんが、私はこの

myArr = #an array of objects 
myArr -contains @{someProp = 'hasThisValue'} 

答えて

2

あなたがその構文ではなく、あなたがわずかに異なる構文を使用できないことができます。コレクションのプロパティを使用して

$myarr.someprop -contains 'hasthisvalue' 

は、PowerShellは、プロパティ値のコレクションを作成しますそれはあなたが期待するような作品を含んでいます。

0

興味深い質問のように何かをしたいと思います。 Compare-Objectコマンドレットを使用するとします。

私は最後にいくつかのテストを行いました。-containsは、オブジェクトへの参照がある場合、オブジェクトに対して意図したとおりに動作するように見えます。参照ではない同一のオブジェクトを含むcontainsを使用しようとすると、失敗します。

たとえば、この例を考えてみましょう。

$myArr = @(@{'Item 1'='Value 1'},@{'Item 2'='Value 2'},@{}) 
$ItemByVal= @{'Item 1'='Value 1'} 
$ItemByRef = $myArr | select -First 1 

Write-host "Compare using Contains by val: $($myArr -contains $UtemByVal)" -ForegroundColor Red 
Write-Host "Comapre using contains By ref: $($myArr -contains $ItemByRef)" -ForegroundColor Green 

ItemByValはcontainsを使用しても機能しません。

Compare-Objectコマンドレットは両方の方法を使用しても正常に動作します。参照や値で使うことができます。

Compare-Object $myArr $ItemByVal -ExcludeDifferent -IncludeEqual -PassThru 
Compare-Object $myArr $ItemByRef -ExcludeDifferent -IncludeEqual -PassThru 

output

0

explain @Mike Shepardのようなプロパティを使用する必要があります。 -inも次のように使用できます。

$myArr = @{PropName1='Value 1';PropName2='test1'},@{PropName1='Value 2';PropName2='test2'} 
"Value 1" -in $myArr.PropName1 
関連する問題