Das Problem mit den Arrays ist doch, dass die sich in der Länge ändern können und dann war es dass mit dem linearen Array (bzw. man braucht eine riesige Umkopieraktion).
Wäre da nicht eine Klasse besser, die dieses 3D-Konstrukt beherbergt? Da könnte man dann so einiges kapseln und sichern und auch auf Änderungen reagieren.
Delphi-Quellcode:
TData<T> = class
public
property Value[x,y,z:Integer] : T read GetValue write SetValue;
end;
Den Zugriff kann man dann über ein Dictionary abbilden
Delphi-Quellcode:
TDataPoint = record
x, y, z : integer;
end;
FData : TDictionary<TDataPoint,T>;
Und für die Statistik nimmt man sich ein weiteres Dictionary
Delphi-Quellcode:
FStat : TDictionary<T,Integer>;
Der Setter nimmt nun den alten Wert aus der Statistk und fügt den neuen Wert ein. Zum Vergleichen benötigt man nur noch die Statistik.
Ist ein DataPoint nicht im Dictionary, dann gibt es als Wert
Default(T)
zurück und wenn
Default(T)
gesetzt wird, dann wird der Eintrag aus dem Dictionary entfernt.