![]() |
Delphi-Version: XE2
Upgradewunsch und Fragen zu TArray
Es wäre doch OK, wenn ich mir sowas wünschen würde? (wollte mir demnächst mal einen paar QC-Einträge dazu erstellen)
Bzw. hat wer was gegen sowas oder eher noch Verbesserungsideen, bzw. andere Lösungswege?
Delphi-Quellcode:
Einfach, um diese Befehle direkt nutzen zu können, ohne mir erst einen Comparer erstellen zu müssen.
// Unit Generics.Collections
type TArray = class public ... class procedure Sort<T>(var Values: array of T; const Comparison: TComparison<T>); overload; class procedure Sort<T>(var Values: array of T; const Comparison: TComparison<T>; Index, Count: Integer); overload; ... class function BinarySearch<T>(const Values: array of T; const Item: T; out FoundIndex: Integer; const Comparison: TComparison<T>; Index, Count: Integer): Boolean; overload; class function BinarySearch<T>(const Values: array of T; const Item: T; out FoundIndex: Integer; const Comparison: TComparison<T>): Boolean; overload; end; class procedure TArray.Sort<T>(var Values: array of T; const Comparison: TComparison<T>); begin Sort<T>(Values, TComparer<T>.Construct(Comparison), Low(Values), High(Values)); end; class procedure TArray.Sort<T>(var Values: array of T; const Comparison: TComparison<T>; Index, Count: Integer); begin Sort<T>(Values, TComparer<T>.Construct(Comparison), Index, Count); end; class function TArray.BinarySearch<T>(const Values: array of T; const Item: T; out FoundIndex: Integer; const Comparison: TComparison<T>; Index, Count: Integer): Boolean; begin Result := BinarySearch<T>(Values, Item, FoundIndex, TComparer<T>.Construct(Comparison), Index, Count); end; class function TArray.BinarySearch<T>(const Values: array of T; const Item: T; out FoundIndex: Integer; const Comparison: TComparison<T>): Boolean; begin Result := BinarySearch<T>(Values, Item, FoundIndex, TComparer<T>.Construct(Comparison), Low(Values), High(Values)); end;
Delphi-Quellcode:
var
Liste: array of irgendwas; TArray.Sort<irgendwas>(Liste, MyHiddenCompare); // bzw. TArray.Sort<irgendwas>(Liste, function(const Left, Right: irgendwas): Integer begin //Result := MyHiddenCompare(Left, Right); if Left.xyz < Right.xyz then Result := -1 else if Left.xyz > Right.xyz then Result := +1 else Result := 0; end); Nja, vielleicht noch ein paar fräglein dazu... - Wieso ist der generische Parameter eigentlich an jeder einzelnen Methode dran und nicht an der Klasse?
Delphi-Quellcode:
Irgendwie empfinge ich das als unschönen "doppelten" Code. :gruebel:
TArray<irgendwas>.Sort(...)
- Und warum hat man
Delphi-Quellcode:
genommen und nicht
array of T
Delphi-Quellcode:
?
TArray<T>
Als Var-Parameter geht ja eigentlich kein offener Array-Parameter, sodern es müßte ein stischer Typ sein. :gruebel: [add] PS: hier kann man immernoch nicht XE3 auswählen, aber eigentlich mein ich ja XE4 (weil früher wird eh wieder nix passieren) |
AW: Upgradewunsch und Fragen zu TArray
Zitat:
Zitat:
Delphi-Quellcode:
bereits als
TArray<T>
Delphi-Quellcode:
deklariert ist, somit keine Klasse ist und auch keine Klassenmethoden haben kann.
array of T
|
AW: Upgradewunsch und Fragen zu TArray
Zitat:
(OK, können schon, aber wäre etwas unpraktisch) Nja, generische Record-Helper gibt's ja leider nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 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-2025 by Thomas Breitkreuz