Znalezienie max wartości w danym przedziale czasu.

0

Witam,
posiadam dane w liście:

type
TDane = record
     Data: WideString;
     ilosc: Double;
     opis: WideString;
   end;
.
.
.
MojaLista:TList<TDane>;

przy pomocy:

function TForm1.SearchList(data:WideString; Sort:Boolean; List:TList<TDane >): Integer;
var Comparer: IComparer<TDane >;
    Dummy: TDane ;
begin

  Comparer := TDelegatedComparer<TDane >.Construct(
    function (const L, R: TDane ): Integer
    begin
      Result := Sign(VarToDateTime(L.Data) - VarToDateTime(R.Data));
    end
  );

  if Sort then List.Sort(Comparer);

  Dummy.Data := data;

  if not List.BinarySearch(Dummy, Result, Comparer) then
    Result := -1;
end;

sprawdzam czy data istnieje w moich danych ( w mojej liście) i zwracam jego Id (Id listy).
Chciałbym sprawdzić dla danego przedziału czasu największą ilość w mojej liście. Jak mógłbym to zrobić najbardziej optymalnie ?

1

1.skoro masz generyki to pewnie jest to delphi, które ma unicode więc dlaczego WideString?
2. dlaczego data (jeśli to rzeczywiście jest data i/lub czas) jest zapisana jako string a nie jako TDateTime
3. sortujesz, znajdujesz początek przedziału (albo od początku listy), i lecisz każdy kolejny element aż znajdziesz koniec przedziału (albo koniec danych) jednocześnie szukając największej ilości.

Nic efektywniejszego nie znajdziesz - możesz wyłuskać przedział do nowej listy i posortować go po ilości ale to zajmie więcej czasu niż pojedyncze przelecenie przedziału i wyciągnięcie największej wartości

1 użytkowników online, w tym zalogowanych: 0, gości: 1