Benutzer mit den meisten Antworten
Werte aus Array löschen

Frage
-
Hallo zusammen,
ich möchte Werte aus einem Array löschen. Hierbei möchte ich die Wahl haben, ob die zu löschenden Werte über eine Variable oder z.B. von 0-2 angegeben werden.
Da man anscheinend nicht aus einem Array löschen darf, da es eine feste Größe hat, habe ich das hier versucht:
geht:
[System.Collections.ArrayList]$ArrayAll = 'Comp01', 'Comp02', 'Comp03', 'Comp04', 'Comp05', 'Comp06', 'Comp07', 'Comp08', 'Comp09', 'Comp10', 'Comp11', 'Comp12' [System.Collections.ArrayList]$ToDelete1 = 'Comp01', 'Comp02', 'Comp03' $ArrayAll.RemoveAt($ArrayAll.IndexOf("Comp01"))
geht nicht:
[System.Collections.ArrayList]$ArrayAll = 'Comp01', 'Comp02', 'Comp03', 'Comp04', 'Comp05', 'Comp06', 'Comp07', 'Comp08', 'Comp09', 'Comp10', 'Comp11', 'Comp12' [System.Collections.ArrayList]$ToDelete1 = 'Comp01', 'Comp02', 'Comp03' $ArrayAll.RemoveAt($ArrayAll.IndexOf("$ToDelete1"))
geht auch nicht:
[System.Collections.ArrayList]$ArrayAll = 'Comp01', 'Comp02', 'Comp03', 'Comp04', 'Comp05', 'Comp06', 'Comp07', 'Comp08', 'Comp09', 'Comp10', 'Comp11', 'Comp12' [System.Collections.ArrayList]$ToDelete1 = 'Comp01', 'Comp02', 'Comp03' $ArrayAll.RemoveAt($ArrayAll.IndexOf("[0..2]"))
Schonmal vielen dank für euren Input!
Sönke
Antworten
-
Moin,
RemoveAt akzeptiert nur einen Wert (https://docs.microsoft.com/de-de/dotnet/api/system.collections.arraylist.removeat?view=netframework-4.7.2). Daher gehen beide Varianten:
foreach ($td in $ToDelete1) { $ArrayAll.RemoveAt($ArrayAll.IndexOf($td)) }
sowie
foreach ($td in $ToDelete1) { $ArrayAll.Remove($td) }
Nicht ganz intuitiv dabei ist, dass die beiden Varianten tatsächlich äquivalent sind und bei sich wiederholenden Werten beide nur das erste Vorkommen entfernen.
Side note:
$ArrayAll.IndexOf("$ToDelete1")
dürfte immer -1 ergeben, wenn $ToDelete1 mehr als ein Element enthält, denn Du suchst nach dem Index eines Strings, der alle Mitglieder von $ToDelete1 mit Leerzeichen getrennt hintereinander weg beinhaltet. Das dürfte es in dem zu durchsuchenden Array nicht geben.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> https://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com
In theory, there is no difference between theory and practice. In practice, there is.
- Als Antwort markiert Sönke T Samstag, 9. Februar 2019 10:24
Alle Antworten
-
Moin,
RemoveAt akzeptiert nur einen Wert (https://docs.microsoft.com/de-de/dotnet/api/system.collections.arraylist.removeat?view=netframework-4.7.2). Daher gehen beide Varianten:
foreach ($td in $ToDelete1) { $ArrayAll.RemoveAt($ArrayAll.IndexOf($td)) }
sowie
foreach ($td in $ToDelete1) { $ArrayAll.Remove($td) }
Nicht ganz intuitiv dabei ist, dass die beiden Varianten tatsächlich äquivalent sind und bei sich wiederholenden Werten beide nur das erste Vorkommen entfernen.
Side note:
$ArrayAll.IndexOf("$ToDelete1")
dürfte immer -1 ergeben, wenn $ToDelete1 mehr als ein Element enthält, denn Du suchst nach dem Index eines Strings, der alle Mitglieder von $ToDelete1 mit Leerzeichen getrennt hintereinander weg beinhaltet. Das dürfte es in dem zu durchsuchenden Array nicht geben.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> https://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com
In theory, there is no difference between theory and practice. In practice, there is.
- Als Antwort markiert Sönke T Samstag, 9. Februar 2019 10:24
-
Danke, funktioniert prima! Und dann noch so schnell am Wochenende!!!
Glücklicherweise habe ich mein Array schon zuvor um doppelte Werte bereinigt. Aber gut zu wissen, dass die Werte nur einmal entfernt werden.
Zur Side Note: Stimmt, hab ich mich schon gewundert. Danke für die Erklärung!
Sönke