2009-09-30 57 views
1

我目前正在與Vista CodeGear Delphi 2007下工作。 我的應用程序在一些相當繁重的計算過程中返回內存不足錯誤。 的.exe文件從150 MB增長到驚人的2 Gb如何檢索multidimentional包含來自arraylist多維數組的類元素

關於這個問題(笑!):

1)我改變了一些數組到ArrayList中 但它給了我一些比較困難的問題,解決方案(請參閱下面的示例)

2)適用於多維結構和需求的建議代碼中的小改動最受讚賞!

現在解決成員的老辦法是:

function TResults.GetTriangleA(ComNr, triangleA, PtNr : integer) : single; 
    Begin 
    try 
    result := ListTriangleRes[TriangleA - 1].GetA(ComNr, PtNr); 

而且療法是類TriangleResult:

TTriangleRes = class(TResults) 
private 
IndexPoint1, IndexPoint2, Indexpoint3 : integer; 
MyA : array of array [1..3] of single; 
MyB : array of array [1..3] of single; 

在這裏,我試圖用新的ArrayList的工作我的出路,但並不是很成功到現在

function TResults.GetTriangleVz(ComNr, triangleA, PtNr : integer) : single; 
Var 
    MyTriangleRes: TTriangleRes; 
    MyObj:   Tobject; 
begin 
    MyTriangleRes:= TTriangleRes.Create ; 
    try 
    MyObj := ListTriangleRes[TriangleA - 1] ; 
    result := MyObj <<<<?????? how to>>>>MyTriangleRes.GetVz(ComNr, PtNr); 

MKR

愛德華

回答

0

我真的不知道你正在嘗試做的,但不應該你最後的代碼是MyTriangleRes:= ListTriangleRes [TriangleA-1],然後結果:= MyTriangleRes.GetVz(ComNr, PtNr)?

1

據我所知,ArrayList是一個Java/C#集合,它不在Delphi中使用。我們的等價物稱爲TObjectList。 (或TList,但如果您使用的是對象,最好使用TObjectList。)那就是您正在使用的?我會假設你是。

它看起來像你的問題是對象類型。有兩種方法可以從正確類型的列表中獲取對象。您可以使用普通列表和類型轉換,或者如果您有D2009或D2010,則可以使用通用列表。

第一種方式,使用TObjectList:

MyTriangleRes := ListTriangleRes[TriangleA - 1] as TTriangleRes; //type-safe cast 

方式二:聲明ListTriangleRes作爲TObjectList<TTriangleRes>,並添加Generics.Collections您使用條款。這樣可以在編譯時而不是運行時提供類型安全性,因爲編譯器將確保只有TTriangleRes對象進入列表。

無論哪種方式,都不需要中間TObject變量。

+0

第二種方式僅適用於D2009 +,愛德華正在使用D2007 – 2009-09-30 20:52:18

相關問題