AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Template for numbers only

Ein Thema von WojTec · begonnen am 5. Feb 2015 · letzter Beitrag vom 5. Feb 2015
 
Benutzerbild von himitsu
himitsu

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

AW: Re: AW: Template for numbers only

  Alt 5. Feb 2015, 17: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;
Ein Therapeut entspricht 1024 Gigapeut.

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 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