array mit einer bestimmten Grösse in PowerShell definieren?
Wie kann man in Powerhshell ein Arraylist mit bestimmter Grosse definieren?
2 Antworten
tausend Wege führen nach Rom:
$arr = New-Object -TypeName 'int[]' -ArgumentList 10000;
$arr.length
#es sind wirklich 10000 Felder...
Write-Host $arr
kurz:
$arr = New-Object 'int[]'10000;
oder in .Net-schreibweise:
$arr = [int[]]::new(10000);
Dies erzeugt ein streng typisiertes Array
Zuweisung mit falschem Typ zeigt "Rot"
$arr[1]='ein String'
Der Wert "ein String" kann nicht in den Typ "System.Int32" konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format."
In Zeile:1 Zeichen:1
+ $arr[1]='ein String'
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
Einem untypisierten Array Array of Objects kann man alles Mögliche zuweisen
$arr=[object[]]::new(10)
$arr[1]='ein String'
$arr[2]=2
$arr
dito untypisiert:
$arr = @($null) * 10
echte Arrays haben immer eine feste vordefinierte Größe
[Array]$arr=5,7 #hier ist das Array 2 Zellen groß
for ($i = 0; $i -le 10; $i++) {
$arr[$i]=$i #und kann auch nicht darüberhinaus Indexiert werden (8x Rot)
}
$arr
Das was in folgendem Beispiel passiert ist eigentlich nur möglich, weil Powershell es mit dem Array nicht wirklich ernst nimmt und bei jeder Erweiterung das Array still und heimlich als Liste/Collection führt und es danach erst als Array speichert.
[Array]$arr=5,7
for ($i = 0; $i -le 10; $i++) {
$arr+=$i
}
$arr
Das alles hat jedoch nichts mit dem zu tun, was Du Dir in den Kommentaren aus der Nase hast ziehen lassen...
Ich will Werte in einem Array speichern und denn alles außer den letzen 3 oder so(Man kann auswählen) löschen.
Du brauchst kein vordefiniertes Array....
#erzeuge einfach ein Array
for ($i = 0; $i -le 10; $i++) {
$arr+="Ich bin Arrayzelle $i"
}
$arr
'
Die letzten 3:'
#mit select festlegen was wir behalten wollen
$arr=$arr|Select -last 3
$arr
...Select-Object ist eines der Cmd-lets welche schon eine Anfänger in der Werkzeukiste haben sollte....
Soweit ich weiß gibt es keinen Weg in Powershell dem Array eine feste Größe zuzuordnen. Man kann immer um ein Feld erweitern. Wozu brauchst du denn die feste Größe?
Entschuldigung, habe aus versehen auf "Nicht hilfreich hilfreich" gedrückt. Ich will Werte in einem Array speichern und denn alles außer den letzen 3 oder so(Man kann auswählen) löschen.