AGB  ·  Datenschutz  ·  Impressum  







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

Universelles Array

Ein Thema von bernau · begonnen am 3. Mär 2016 · letzter Beitrag vom 3. Mär 2016
 
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.307 Beiträge
 
Delphi 12 Athens
 
#7

AW: Universelles Array

  Alt 3. Mär 2016, 17:26
Mir sind aber die Funktionen mit den Sets sehr wichtig.
Du willst es eh umbauen, oder?
Ähm Nö. Den Part lasse ich.


Übergibt doch dem Record einfach im Constructor eine Methodenzeiger der aus dem Set's bytes macht und entsprechend der Set-Größe dir die Arrays dynamisch erzeugt...

Oder ruf es direkt so auf

TccArray.Count[SetAtoByte(A1),SetBtoByte(B2)] := 7;
Das war Gedankenübertragung. ja. ich arbeite statt mit Sets einfach mit Arrays.

Die Klasse sieht jetzt so aus:

Delphi-Quellcode:
  TccArray2D<TIndexX, TIndexY> = class
  private
    fCount: TDictionary<TPair<TIndexX, TIndexY>, Integer>;
    fValue: TDictionary<TPair<TIndexX, TIndexY>, Double>;
    function GetCount(aIndexX: TIndexX; aIndexY: TIndexY): Integer;
    function GetValue(aIndexX: TIndexX; aIndexY: TIndexY): Double;
    procedure SetCount(aIndexX: TIndexX; aIndexY: TIndexY; const Value: Integer);
    procedure SetValue(aIndexX: TIndexX; aIndexY: TIndexY; const Value: Double);

    Function IndexPair(aKey: TIndexX; aValue: TIndexY): TPair<TIndexX, TIndexY>;
  public
    constructor Create;
    Destructor Destroy; override;
    Property Count[aIndexX: TIndexX; aIndexY: TIndexY]: Integer read GetCount write SetCount;
    Property Value[aIndexX: TIndexX; aIndexY: TIndexY]: Double read GetValue write SetValue;
    Function Average(aIndexX: TIndexX; aIndexY: TIndexY): Double;
    Function CountSum(aIndexX: array of TIndexX; aIndexY: array of TIndexY): Integer;
    Function ValueSum(aIndexX: array of TIndexX; aIndexY: array of TIndexY): Double;
    Procedure IncCount(aIndexX: TIndexX; aIndexY: TIndexY; aInc: Integer);
    Procedure AddValue(aIndexX: TIndexX; aIndexY: TIndexY; aValue: Double);
  end;
Darin sind zwei TDictionary, welche die Daten aufnehmen. Wer mir nicht so sicher, ob es performant genug ist.

Ein paar Pi-daumen-tests haben ergeben, 32000000 Werte zufügen benötigt ca. 5 Sekunden. Reicht für mich.

Das mit der Funktion, welches die Sets in ein Array wandeln ist ne gute Idee.

Auch kann ich die Klasse einfach erweitern. Einfach in der Ableitung eine Funktion mit den Sets definieren. Darin in Array Wandeln und an die vorhandene Array-Funktion übergeben

Delphi-Quellcode:
  TMyArray = class(TccArray2D<TEnumA, TEnumB>)
  private
  public
    Function CountSumFromSet(IndexA: TEnumASet; IndexB: TEnumBSet): Integer;
  end;
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  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 08: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