Ich verwende Spring4D für alle Sammlungen.Wie implementiere ich einen Enumerator mit IsFirst- und IsLast-Funktionen?
Jetzt gibt es eine Situation, in der ich wissen muss, ob der aktuelle Wert des Enumerators der erste (der einfach ist) oder der letzte (der schwer ist) in der Auflistung ist.
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Spring.Collections;
var
Enumerable: IEnumerable<Integer>;
Enumerator: IEnumerator<Integer>;
begin
Enumerable := TEnumerable.Query<Integer>(TArray<Integer>.Create(1, 2, 3, 4, 5)
) as IEnumerable<Integer>;
Enumerator := Enumerable.GetEnumerator;
while Enumerator.MoveNext do
begin
WriteLn('Value = ', Enumerator.Current);
WriteLn('First in collection? ', Enumerator.CurrentIsFirst);
WriteLn('Last in collection? ', Enumerator.CurrentIsLast);
end;
ReadLn;
end.
CurrentIsFirst
könnte eine lokale Boolesche implementiert werden, die, sobald der erste Wert zurückgesetzt wird, bestanden hat.
Allerdings kenne ich keine einfache Möglichkeit CurrentIsLast
zu implementieren.
Es sollte in der Lage sein, faule Sammlungen zu verarbeiten, da sie zu viele Werte enthalten können, um in den Speicher zu passen.
Wie kann ich eine solche CurrentIsLast
Funktion implementieren?
Ich frage mich immer noch, was Sie mit dem Wissen erreichen wollen, wenn ein Element das erste oder letzte ist und es nicht ganz anders gelöst werden kann. –
Wir verwenden es für eine etwas ungewöhnliche Form eines [Control Break] (https://en.wikipedia.org/wiki/Control_break). –
Wie gesagt, könnte es eine andere Möglichkeit geben, dies zu tun - zum Beispiel in dem Wikipedia-Artikel, mit dem Sie verlinkt haben, spricht von einer Gruppierung, die mit TEnumerable.GroupBy gemacht werden kann. –