Witam,
szukam inspiracji / podpowiedzi jak zrobić coś na kształt kolekcji z .NET tzn
chciałbym mieć taką tablicę, o indeksach znakowych, która przechowywałaby obiekty wskazanego typu
Czy to jest wykonalne (najlepiej na delphi 7) ? Jedyne co przychodzi mi do głowy to wykorzystanie memtable.....
Pozdrawiam
A podglądnij sobie kod TStringList ( lub TStrings ), moduł Classes, tam są cusie które przyjmują indeks w formie stringa,po prostu udają tablice
Chodzi o indeksowanie łańcuchami znaków ?
Możesz użyć THashedStringList z IniFiles
Klasa TList. Poczytaj też artykuł "Tablice asocjacyjne"
Hm....aby skorzystać z TAssocArray musze pracować z SDL
... a użyć indeksów znakowych przy TList / TStrings nie potrafię (czy mam rozszeżyć klasę ?)
[wstyd] poratujcie
obecnie napisałem to na dwóch TList - łącze wspólnym indeksem
A co ci nie pasuje w THashedStringList ? Poza tym do tego wystarczy jeden TStringList, ale wyszukanie odpowiedniego łańcucha zajmie dużo więcej jak przy THashedStringList.
THashedStringList = class(TStringList)
.....
public
destructor Destroy; override;
function IndexOf(const S: string): Integer; override;
function IndexOfName(const Name: string): Integer; override;
end;
dziedziczy z TStringList
TStringList = class(TStrings)
.....
public
destructor Destroy; override;
function Add(const S: string): Integer; override;
function AddObject(const S: string; AObject: TObject): Integer; override;
procedure Clear; override;
procedure Delete(Index: Integer); override;
procedure Exchange(Index1, Index2: Integer); override;
function Find(const S: string; var Index: Integer): Boolean; virtual;
function IndexOf(const S: string): Integer; override;
procedure Insert(Index: Integer; const S: string); override;
procedure InsertObject(Index: Integer; const S: string;
AObject: TObject); override;
procedure Sort; virtual;
procedure CustomSort(Compare: TStringListSortCompare); virtual;
property Duplicates: TDuplicates read FDuplicates write FDuplicates;
property Sorted: Boolean read FSorted write SetSorted;
property CaseSensitive: Boolean read FCaseSensitive write SetCaseSensitive;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property OnChanging: TNotifyEvent read FOnChanging write FOnChanging;
end;
Poza zmianą (wydajność) w sposobie przeszukiwania, nie widzę specjalnego zastosowania dla zapisu myList.Add('klucz','wartość');
Pzdr
TStringList pozwala na skojarzenie obiektu (TObject) z każdym łańcuchem. Obadaj metody i własności z "Object" w nazwie.
TStringList.AddObject('klucz', PochodnaTObject)
Sprawdza się świetnie. Ogólnie TStringList jest dla mnie jak chleb w życiu powszednim. Nadaje się idealnie do przeróżnych zastosowań. Nawet z combox'a można zrobić coś co oprócz stringów przechowuje też ID (np z bazy). Jeśli chcesz mieć silne typowanie, możesz spróbować "typów generycznych" ale takich z IFDEF'ami. Jak znajdę link do tej stronki co kiedyś widziałem to wkleję. A jak Ci nie zależy na uniwersalności to zrób sobie klasę przechowującą obiekty konkretnego typu. To wszystko jest bardzo proste.
http://www.dummzeuch.de/delphi/object_pascal_templates/english.html
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.