I still don't quite get what you plan to do "better" than System.Math.SameValue(..)
Er möchte nicht zwei Werte vergleichen (
SameValue), sondern in einer Liste von Werten den
Ähnlichsten heraussuchen.
Also eher wie
MaxValue, nur eben nicht das Größte, sondern das Ähnlichste ... fast wie eine unscharfe Suche ala
MatchText, zusammengemanscht mit einem
IndexText.
array of const
-> siehe
Format = Man kann alles möglichen Typen übergeben (Integer, Float usw.) und entscheidet dann intern, wie man welchen Typen behandelt, also ähnlich einem
array of variant
.
Delphi und C# kennen sowas wie "Number" nicht als Einschränkung.
http://docwiki.embarcadero.com/RADSt...ierte_Typen%29
https://msdn.microsoft.com/de-de/library/d5x73970.aspx
Java kann so etwas, aber dort ist doch letztendlich alles irgendwie eine Klasse.
http://www.java-forum.org/java-basic...chraenken.html
Ohne "nummerische" Typeinschränkung funktioieren viele Dinge einfach nicht.
Warum es soeine Einschränkung nicht gibt, welche alle nummerischen Typen und Records mit Operatoren erlauft, weiß ich nicht.
Delphi-Quellcode:
type
TValue<T> = class
class function Similar(const AValue: T; const AValues: array of T; out AResult: T): Integer;
end;
class function TValue<T>.Similar(const AValue: T; const AValues: array of T; out AResult: T): Integer;
var
i: Integer;
Distance, Smallest: T;
begin
Result := -1;
AResult := Default(T);
Smallest := Max(T); // gibt es nicht
for i := Low(AValues) to High(AValues) do begin
Distance := Abs(AValue - AValues[i]); // geht nicht
if Distance < Distance then begin // geht nicht
Result := I;
AResult := AValues[I];
Smallest := Distance
end;
end;
end;