簡體   English   中英

如何從數組列表中檢索包含多維數組的類元素

[英]How to retrieve multidimensional a class element containing multidimensional arrays from an arraylist

我目前正在Vista下使用CodeGear Delphi 2007。 在進行一些相當繁重的計算時,我的應用程序返回了內存不足錯誤。 .exe文件從150 Mb增長到驚人的2 Gb(!LOL)

關於此問題:

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);

k

愛德華

據我所知,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變量。

我不確定自己要做什么,但是您的最后一個代碼不應該是MyTriangleRes:= ListTriangleRes [TriangleA-1],然后是Result:= MyTriangleRes.GetVz(ComNr,PtNr)嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM