2009-03-06 37 views
13

私は配列内のファイルのリストを持っています。私はそれらのファイルを列挙し、そこから特定のファイルを削除したい。明らかに配列から項目を削除できないので、ArrayListを使いたいと思います。 しかし、私のために動作しません、次$tempは、アレイをあるPowerShellで配列からArrayListを作成する方法は?

$temp = Get-ResourceFiles 
$resourceFiles = New-Object System.Collections.ArrayList($temp) 

どうすれば実現できますか?

答えて

27

私はそのコンストラクタを動作させることができません。しかし、これは動作するようです:

# $temp = Get-ResourceFiles 
$resourceFiles = New-Object System.Collections.ArrayList($null) 
$resourceFiles.AddRange($temp) 

ます。また、初期容量を設定するには、コンストラクタに整数を渡すことができます。

ファイルを列挙するとはどういう意味ですか?必要な値を新しい配列にフィルタリングできないのはなぜですか?

編集:

あなたがこのような配列コンストラクターを使用することができるようです:

$resourceFiles = New-Object System.Collections.ArrayList(,$someArray) 

カンマに注意してください。私は、.NETメソッドを呼び出すと、常にパラメータを配列として渡すということが起こっていると考えています。 PowerShellはその配列を展開し、別のパラメータとしてメソッドに渡します。この場合、PowerShellで配列を展開する必要はありません。配列を単一の単位として渡したいと考えています。さて、コンマ演算子は配列を作成します。そのため、PowerShellは配列を展開した後、コンマ演算子を使用して配列を作成します。私はそれが何が起こっていると思います。

+0

どのようにアイテムをフィルタリングしますか? –

+0

@マーク、削除するファイルをどのように決定するかについて、さらに詳しい情報を教えてください。また、Get-ResourceFilesは何を返しますか? –

+0

私はそこに相対パスを持つテキストファイルを持っています。ディレクトリを列挙した後、ファイルにファイルが存在するかどうかをチェックし、ファイルが存在しない場合はリストから削除します。 Get-ResourceFilesはパスを文字列として返すだけです –

18

おそらく最短バージョン:

[System.Collections.ArrayList]$someArray 

それは比較的高価なNew-Objectを呼び出すことはありませんので、それも高速です。

+1

インスタンスを取得するには、実際にはPowerShell 3.0で私のために働く[System.Collections.ArrayList] $ someArray = @()ですが、powershellが常にArrayListを配列のインスタンスとして使用するかどうかはチェックしませんでした。 – npjohns

関連する問題