Ich möchte eine Liste anlegen. Beispielsweise die Standard
RTL-Liste
System.Generics.Collections.TList
. Oder eine
Spring.Collections.IList
.
Diese Liste soll vom Start weg 20 Einträge haben. Booleans, Floats, irgendwas.
Das sieht dann so aus
Delphi-Quellcode:
uses System.Generics.Collections;
const
numItems: Integer = 20;
stdItemValue: Integer = 0;
var
myList: TList<Integer>;
itemNo: Integer;
begin
myList := TList<Integer>.Create();
for itemNo := 0 to Pred(numItems) do
myList.Add(stdItemValue);
end;
Ich denke, das geht besser. Einer Liste kann man bspw. schön sagen "Füge alle Einträge dieses Arrays hinzu":
Delphi-Quellcode:
uses System.Generics.Collections;
const
numItems: Integer = 20;
stdItemValue: Integer = 0;
var
myArray: TArray<Integer>;
myList: TList<Integer>;
itemNo: Integer;
begin
// Array erstellen und füllen
myArray := TArray<Integer>.Create();
SetLength(myArray, numItems);
for itemNo := 0 to Pred(numItems) do
myArray[itemNo] := stdItemValue;
// Liste aus Array erstellen
myList := TList<Integer>.Create();
myList.AddRange(myArray);
// Mit Spring.Collections.IList ginge auch
// myList := TCollections.CreateList<Integer>(myArray);
end;
Und ich habe das Gefühl, in der Richtung lässt sich das arg zusammenkürzen. Wenn absolut feststeht, dass es immer fünf Elemente sind, kann ich, dank
TArray<>
ja schon den hier machen:
myList.AddRange( TArray<Integer>.Create(0, 0, 0, 0, 0) );
.
Ich hätte jetzt gerne eine Art
TArray<Integer>.Create(elementCount: Integer)
.
Die erste Idee war, einfach einen Record Helper für [Delphi]TArray<T>[/Delphi zu basteln, aber Helferklassen dürfen anscheinend nicht generisch sein.
Während ich das hier tippe fiel mir die nie genutzte, nicht generische Klasse
TArray
aus
System.Generics.Collections
ein:
Wenn ich mir eine winzige Helferklasse mit
Delphi-Quellcode:
TArrayHelper = class helper for System.Generics.Collections.TArray
class function CreateArray<T>(const itemCount: Integer): TArray<T>;
end;
baue kann ich eigentlich schon relativ zufrieden sein. Jetzt kann ich einfach sagen
myList.AddRange( TArray.CreateArray<Integer>(12345) );
bzw.
myList := TCollections.CreateList<Integer>( TArray.CreateArray<Integer>(5) );
Genau das wollte ich. Auch wenn es schon an den Rand des noch komfortabel lesbaren kommt.