[delphi] indeksy znakowe (tablica, kolekcja)

0

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

0

A podglądnij sobie kod TStringList ( lub TStrings ), moduł Classes, tam są cusie które przyjmują indeks w formie stringa,po prostu udają tablice

0

Chodzi o indeksowanie łańcuchami znaków ?
Możesz użyć THashedStringList z IniFiles

0

Klasa TList. Poczytaj też artykuł "Tablice asocjacyjne"

0

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

0

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.

0
  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

0

TStringList pozwala na skojarzenie obiektu (TObject) z każdym łańcuchem. Obadaj metody i własności z "Object" w nazwie.

0

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

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