Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Re: AW: Template for numbers only

  Alt 5. Feb 2015, 18:52
I still don't quite get what you plan to do "better" than System.Math.SameValue(..)
Er möchte nicht zwei Werte vergleichen (Delphi-Referenz durchsuchenSameValue), sondern in einer Liste von Werten den Ähnlichsten heraussuchen.

Also eher wie Delphi-Referenz durchsuchenMaxValue, nur eben nicht das Größte, sondern das Ähnlichste ... fast wie eine unscharfe Suche ala Delphi-Referenz durchsuchenMatchText, zusammengemanscht mit einem Delphi-Referenz durchsuchenIndexText.


array of const -> siehe Delphi-Referenz durchsuchenFormat = 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;
$2B or not $2B

Geändert von himitsu ( 6. Feb 2015 um 00:44 Uhr)
  Mit Zitat antworten Zitat