rekord z tablicami 2d -> record z Tlist

Odpowiedz Nowy wątek
2011-07-08 11:30
0

Witam.
Mam zadeklarowane typy rekordów, oto jeden z nich:

type
 Tselekcjaad1 = record
 param0 : array of byte;
 param1 : array of single;
 param2 : array of array of single;
 param3: array of array of single;
 end;

Problemy zaczęły się gdy musiałem usuwać rekordy z tablic masowo, kombinowałem z tymczasowymi tablicami itp. Wszystko oczywiście można zrobić ale strasznie wolno zaczęło to chodzić (setlength swoje robi). Czytałem o Tlist gdzie jest łatwa możliwość edycji rekordów. Tylko nie mogę jakoś zadeklarować tego co chcę - przykład powyżej. Tylko nie krzyczeć, nigdy nie korzystałem z TList

Pozostało 580 znaków

2011-07-08 11:48
fgyhj
2011-07-08 13:30
1

Pewnie jak coś usuwasz to zamiast użyć Move to kopiujesz element po elemencie...
Co do list to masz przykład

unit TestList;
 
interface
 
uses
  Classes,
  Contnrs;
 
type
  TByteList = class(TList)
  private
    function Get(Index: Integer): Byte;
    procedure Put(Index: Integer; const Value: Byte);
  public
    function Add(Item: Byte): Integer;
    function First: Byte;
    function IndexOf(Item: Byte): Integer;
    procedure Insert(Index: Integer; Item: Byte);
    function Last: Byte;
    function Remove(Item: Byte): Integer;
    property Items[Index: Integer]: Byte read Get write Put; default;
  end;
 
  TSingleList = class(TList)
  private
    function Get(Index: Integer): Single;
    procedure Put(Index: Integer; const Value: Single);
  public
    function Add(Item: Single): Integer;
    function First: Single;
    function IndexOf(Item: Single): Integer;
    procedure Insert(Index: Integer; Item: Single);
    function Last: Single;
    function Remove(Item: Single): Integer;
    property Items[Index: Integer]: Single read Get write Put; default;
  end;
 
  TSingleSingleList = class(TObjectList)
  private
    function Get(Index: Integer): TSingleList;
    procedure Put(Index: Integer; const Value: TSingleList);
  public
    function Add(Item: TSingleList): Integer;
    function First: TSingleList;
    function IndexOf(Item: TSingleList): Integer;
    procedure Insert(Index: Integer; Item: TSingleList);
    function Last: TSingleList;
    function Remove(Item: TSingleList): Integer;
    property Items[Index: Integer]: TSingleList read Get write Put; default;
  end;
 
  TSelekcja = class
  private
    FParam0: TByteList;
    FParam1: TSingleList;
    FParam2: TSingleSingleList;
    FParam3: TSingleSingleList;
  public
    constructor Create;
    destructor Destroy; override;
 
    property param0: TByteList read FParam0;
    property param1: TSingleList read FParam1;
    property param2: TSingleSingleList read FParam2;
    property param3: TSingleSingleList read FParam3;
  end;
 
implementation
 
{ TByteList }
 
function TByteList.Add(Item: Byte): Integer;
begin
  Result := inherited Add(Pointer(Item));
end;
 
function TByteList.First: Byte;
begin
  Result := Byte(inherited First);
end;
 
function TByteList.Get(Index: Integer): Byte;
begin
  Result := Byte(inherited Get(Index));
end;
 
function TByteList.IndexOf(Item: Byte): Integer;
begin
  Result := inherited IndexOf(Pointer(Item));
end;
 
procedure TByteList.Insert(Index: Integer; Item: Byte);
begin
  inherited Insert(Index, Pointer(Item));
end;
 
function TByteList.Last: Byte;
begin
  Result := Byte(inherited Last);
end;
 
procedure TByteList.Put(Index: Integer; const Value: Byte);
begin
  inherited Put(Index, Pointer(Value));
end;
 
function TByteList.Remove(Item: Byte): Integer;
begin
  Result := inherited Remove(Pointer(Item));
end;
 
{ TSingleList }
 
function TSingleList.Add(Item: Single): Integer;
begin
  Result := inherited Add(Pointer(Item));
end;
 
function TSingleList.First: Single;
begin
  Result := Single(inherited First);
end;
 
function TSingleList.Get(Index: Integer): Single;
begin
  Result := Single(inherited Get(Index));
end;
 
function TSingleList.IndexOf(Item: Single): Integer;
begin
  Result := inherited IndexOf(Pointer(Item));
end;
 
procedure TSingleList.Insert(Index: Integer; Item: Single);
begin
  inherited Insert(Index, Pointer(Item));
end;
 
function TSingleList.Last: Single;
begin
  Result := Single(inherited Last);
end;
 
procedure TSingleList.Put(Index: Integer; const Value: Single);
begin
  inherited Put(Index, Pointer(Value));
end;
 
function TSingleList.Remove(Item: Single): Integer;
begin
  Result := inherited Remove(Pointer(Item));
end;
 
{ TSingleSingleList }
 
function TSingleSingleList.Add(Item: TSingleList): Integer;
begin
  result := inherited Add(Item);
end;
 
function TSingleSingleList.First: TSingleList;
begin
  result := TSingleList(inherited First);
end;
 
function TSingleSingleList.Get(Index: Integer): TSingleList;
begin
  result := TSingleList(inherited Get(Index));
end;
 
function TSingleSingleList.IndexOf(Item: TSingleList): Integer;
begin
  result := inherited IndexOf(Item);
end;
 
procedure TSingleSingleList.Insert(Index: Integer; Item: TSingleList);
begin
  inherited Insert(Index, Item);
end;
 
function TSingleSingleList.Last: TSingleList;
begin
  result := TSingleList(inherited Last);
end;
 
procedure TSingleSingleList.Put(Index: Integer; const Value: TSingleList);
begin
  inherited Put(Index, Value);
end;
 
function TSingleSingleList.Remove(Item: TSingleList): Integer;
begin
  result := inherited Remove(Item);
end;
 
{ TSelekcja }
 
constructor TSelekcja.Create;
begin
  FParam0 := TByteList.Create;
  FParam1 := TSingleList.Create;
  FParam2 := TSingleSingleList.Create(True);
  FParam3 := TSingleSingleList.Create(True);
end;
 
destructor TSelekcja.Destroy;
begin
  FParam0.Free;
  FParam1.Free;
  FParam2.Free;
  FParam3.Free;
  inherited;
end;
 
var
  x: TSelekcja;
 
initialization
  x := TSelekcja.Create;
  x.FParam0.Add(123);
  x.FParam1.Add(223);
  x.FParam2.Add(TSingleList.Create);
  x.FParam2[0].Add(213);
  x.FParam2[0][0] := 1234;
 
end.

ale czy to będzie szybsze?

Na listach pewnie było by szybsze, ale zależy do czego tego będziesz używał


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-07-09 11:21
0

Wielkie dzięki Misiekd. Na razie przemielam kod z tablic na listy później opiszę po testach jak to myka, ale zapowiada się ciekawie :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0