Avatar billede r9 Nybegynder
10. februar 2003 - 17:53 Der er 3 kommentarer og
1 løsning

Vector i delphi?

Findes der i Delphi noget som svarer til Java's Vector?

Altså en dynamisk liste som kan indeholde alle slags objecter, og som kan vokse/skrumpe på runtime.

(Jeg har kigget lidt på TList, men den bruger pointers, og det ønsker jeg ikke.)
Avatar billede arne_v Ekspert
10. februar 2003 - 17:56 #1
Jeg tror altså at du bliver nødt til at gemme pointere

Det gør Java Vector jo også.

(alle objekter i java er reelt en pointer !)
Avatar billede r9 Nybegynder
10. februar 2003 - 18:16 #2
Delphi's TList

function Add(Item: Pointer): Integer Adds Item to the end of the list.
procedure Clear Deletes all items from the list.
procedure Delete(Index: Integer) Deletes the item at the given Index.
procedure Exchange(Index1, Index2) Swaps the items at Index1 and Index2.
function Expand: TList Increases the size of the list.
function First: Pointer Returns Items[0].
function IndexOf(Item: Pointer): Integer Returns the index of the first item to match Item.
procedure Insert(Index: Integer; Item: Pointer) Inserts the item at position Index.
function Last: Pointer Returns Items[Count-1].
procedure Move(CurIndex, NewIndex: Integer) Moves the item at CurIndex to NewIndex.
procedure Pack Deletes all nil items.
function Remove(Item: Pointer): Integer Deletes the first item that matches Item.
property Capacity: Integer Sets or gets the number of available slots where list items can be stored.
property Count: Integer Sets or gets the number of items in the list.
property Items[Index: Integer]: Pointer; default Sets or gets the item at position Index.
property List: PPointerList Returns a pointer to the array where TList stores its items.



Java's Vector:

add(int index, Object element)
add(Object o)
addAll(Collection c)
addAll(int index, Collection c)
addElement(Object obj)
capacity()
clear()
clone()
contains(Object elem)
containsAll(Collection c)
copyInto(Object[] anArray)
elementAt(int index)
elements()
ensureCapacity(int minCapacity)
size()
removeElement(Object obj)
.......




Forskellen er vel at man med Vectoren kan gemme object ref, og så klarer java resten, hvor man i Delphi selv skal håndterer "det hele".



MEN Delphi har faktisk en TStringList, som minder rigtig meget om Java's Vector:

var
  sl : TStringList;
  i      : Integer;
begin

  sl := TStringList.Create;


  sl.Add('string1');
  sl.Add('string2');
  sl.Add('string3');


  for i := 0 to sl.Count-1 do
    ShowMessage(sl[i]);
end;




Men problemmet er bare at man kun kan gemme String's i en StringList, og en string i delphi er jo ikke et object.

Men mon ikke der findes den "Vector" type i Delphi.
Nogen må vide det....
Avatar billede athlon-pascal Juniormester
10. februar 2003 - 20:33 #3
Prøv at kigge på følgende, ved ikke om det kan bruges:

StringList.Objects : property Objects[Index: Integer]: TObject;

StringList.AddObject : function AddObject(const S: string; AObject: TObject): Integer; override;

StringList.InsertObject : procedure InsertObject(Index: Integer; const S: string; AObject: TObject); override;

StringList.IndexOfName : function IndexOfName(const Name: string): Integer; virtual;

StringList.IndexOfObject : function IndexOfObject(AObject: TObject): Integer;virtual;

Kig i hjælpen for mere info.
Avatar billede r9 Nybegynder
11. februar 2003 - 23:04 #4
TObjectList var løsningen


The first is the TListDataSet component, a dataset supporting navigation among the data of a TObjectList. This is one of the new Delphi 5 container classes, which only slightly differs from TList. It uses objects instead of pointers (nothing really different, from a technical point of view) and has the ability to destroy the objects in the list when the list is destroyed or cleared.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester