![]() |
Item aus einem dynamischen String-Array löschen
Ich habe ein TArray<string> welches ich mit einer Explode-Funktion fülle. Dieser Explode-Funktion übergebe ich eine Zeichenkette ähnlich dieser "C;D;E;".
Ich würde gerne in der Lage sein Anhand eines Index ein Item aus dem Array zu löschen. Wie bekommt man das am elegantesten hin? Delete(array, 1, 1) funktioniert leider nicht, da mein Array ein property eines Records ist und der Compiler meckert, dass es ein Konstantenobjekt sei. |
AW: Item aus einem dynamischen String-Array löschen
Zitat:
|
AW: Item aus einem dynamischen String-Array löschen
Hallo,
Zitat:
Du brauchst eine Procedure im Record, der du den zu löschenden Index übergibst und dann benutzt Du dort die interne Record-Variable. |
AW: Item aus einem dynamischen String-Array löschen
Zitat:
Teil der Lösung ![]() Zitat:
Das steht bei mir aber nicht in einem class helper for TArray sondern in einem normalen Record in einer anderen Unit. Warum? Weil ich dann nicht in jeder Unit System.Generics.Collections, einbinden muss (TArray ...) |
AW: Item aus einem dynamischen String-Array löschen
Also dies funktioniert hier jedenfalls:
Delphi-Quellcode:
Wenn ich jetzt noch wüsste, was bei dir nicht funktioniert...
program Project425;
{$APPTYPE CONSOLE} uses System.SysUtils; var myArray: TArray<string>; begin myArray := TArray<string>.Create('I''m', 'not', 'amused'); Delete(myArray, 1, 1); Writeln(string.Join(' ', myArray)); Readln; end. |
AW: Item aus einem dynamischen String-Array löschen
Zitat:
Delphi-Quellcode:
Aus einer anderen Unit rufe ich dann auf
type
TFilterOptions = record private FFilterList: TArray<string>; public property FilterList: TArray<string> read FFilterList write FilterList; procedure LoadFilterList; // Prozedur die die Liste aus einer Datei lädt und in FilterList schreibt // NEU procedure FilterListDeleteFromArray(const Index: Integer); end; implementation uses ... procedure TFilterOptions.FilterListDeleteFromArray(const Index: Integer); begin TArrayHelper.Delete<string>(FFilterList, Index); end;
Delphi-Quellcode:
Ich habe gerade ein paar Tests durchgeführt und alles funktioniert. Ein netter Nebeneffekt ist, dass ich circa 100 Zeilen Code einsparen konnte (alter, schlechter Code wo ich ständig eine Ini-Datei lade).
TFilterOptions.FilterListDeleteFromArray(1);
|
AW: Item aus einem dynamischen String-Array löschen
Ich kann leider deine Delphi-Version nicht erkennen. Funktioniert dies bei dir nicht?
Delphi-Quellcode:
procedure TFilterOptions.FilterListDeleteFromArray(const Index: Integer);
begin Delete(FFilterList, Index, 1); // alternativ System.Delete(FFilterList, Index, 1) end; |
AW: Item aus einem dynamischen String-Array löschen
Die "string-like"-Array-Funktionen ala Insert/Delete/+ wurden erst vor Kurzem eingebaut.
|
AW: Item aus einem dynamischen String-Array löschen
Zitat:
Sollte ich hier nun besser Delete() verwenden oder meinen eigenen Wrapper TArrayHelper.Delete<T>()? Ich bin bisher so verfahren, dass ich meist meine eigenen Wrapper nutze, da ich dort den Aufruf manipulieren kann und so nur eine Änderung vornehmen muss statt an 100 Stellen. Zitat:
|
AW: Item aus einem dynamischen String-Array löschen
Neee,
![]()
Delphi-Quellcode:
Früher ging das nur mit Strings, weswegen dieses supercoole neue Feature in der What's New auch als "string-like" betitelt wurde.
ArrayOrString := ArrayOrString1 + ArrayOrString2;
Insert(Value, ArrayOrString, X); Delete(ArrayOrString, X, Y); ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz