13

PowerShell v2 では、一意の値のみを配列に追加しようとしています。大まかに言うと、If (-not $Array -contains 'SomeValue') という if ステートメントを使用してみましたが、値を追加しましたが、これは初めてしか機能しません。私がやっていることがうまくいかないことと、うまくいく回避策として私がやったことを示す簡単なコードスニペットを入れました。誰かが私の問題がどこにあるのか教えてもらえますか?

Clear-Host
$Words = @('Hello', 'World', 'Hello')

# This will not work
$IncorrectArray = @()
ForEach ($Word in $Words)
{
    If (-not $IncorrectArray -contains $Word)
    {
        $IncorrectArray += $Word
    }
}

Write-Host ('IncorrectArray Count: ' + $IncorrectArray.Length)

# This works as expected
$CorrectArray = @()
ForEach ($Word in $Words)
{
    If ($CorrectArray -contains $Word)
    {
    }
    Else
    {
        $CorrectArray += $Word
    }
}

Write-Host ('CorrectArray Count: ' + $CorrectArray.Length)

最初のメソッドの Result は、「Hello」という値を 1 つだけ含む配列です。2 番目のメソッドには、"Hello" と "World" の 2 つの値が含まれています。どんな助けでも大歓迎です。

4

2 に答える 2

15

コードを修正するに-notcontainsは、contains-test を括弧で囲むか、少なくとも WRAP してください。気圧 あなたのテストは次のようになります:

「NOT 配列」の場合 (配列が存在しない場合) に単語が含まれます。

これは意味がありません。あなたが望むものは:

配列に単語が含まれていない場合..

それは次のように書かれています。

If (-not ($IncorrectArray -contains $Word))

-notcontains@dugasが提案したように、さらに優れています。

于 2013-04-22T18:22:42.287 に答える