2009-03-06 16 views
13

Dizideki dosyaların bir listesi var. Bu dosyaları numaralandırmak ve belirli dosyaları kaldırmak istiyorum. Açıkçası, bir diziden öğeleri kaldıramıyorum, bu yüzden bir ArrayList kullanmak istiyorum. Ama benim için çalışmıyor şu: $temp bir Array olduğunuPowerShell'de bir Diziden bir ArrayList nasıl oluşturulur?

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

.

Bunu nasıl başarabilirim?

cevap

27

Bu kurucunun da çalışmasını sağlayamıyorum.

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

Ayrıca bir başlangıç ​​kapasitesi ayarlamak için yapıcı bir tamsayı geçirebilirsiniz: Bu ancak iş gibi görünüyor.

Dosyaları numaralandırmak istediğinizi söylediğiniz zaman ne demek istiyorsunuz? Neden aranan değerleri yeni bir diziye filtrelemiyorsunuz?

Düzenleme:

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

Not virgül:

O böyle dizi kurucu kullanabilirsiniz görünüyor. Neler olduğunu düşünüyorum, bir .NET yöntemini çağırdığınızda, her zaman parametreleri bir dizi olarak geçirmenizdir. PowerShell bu dizinin paketini açar ve ayrı parametreler olarak yönteme aktarır. Bu durumda, PowerShell'in dizinin paketini açmasını istemeyiz; diziyi tek bir birim olarak geçmek istiyoruz. Şimdi, virgül operatörü diziler oluşturur. Böylece PowerShell diziyi paketinden çıkarır, sonra diziyi virgül operatörüyle tekrar oluştururuz. Bence bu devam ediyor.

+0

Öğeleri nasıl filtrelersiniz? –

+0

@Mark, hangi dosyaların kaldırılacağına nasıl karar vereceğiniz hakkında daha fazla bilgi verebilir misiniz? Ayrıca, Get-ResourceFiles ne döndürür? –

+0

İçinde göreli yollar bulunan bir metin dosyası var. Bir dizin yazdıktan sonra, dosyada var olup olmadığını kontrol etmek istiyorum ve eğer mevcut değilse, listeden kaldırın. Get-ResourceFiles yalnızca –

18

Muhtemelen en kısa versiyon: nispeten pahalı New-Object çağırmaz çünkü hızlı yapabileceksiniz

[System.Collections.ArrayList]$someArray 

.

+1

Örnek almak gerekirse, bu aslında Powershell 3.0'da benim için çalışan [System.Collections.ArrayList] $ someArray = @() olacaktır, ancak powershell'ün her zaman dizi örneği olarak ArrayList'i kullanıp kullanmadığını kontrol etmedim. – npjohns

İlgili konular