Avatar billede Slettet bruger
14. maj 2002 - 15:55 Der er 4 kommentarer og
2 løsninger

dynamisk array

jeg er ved at lave en IRC client, og ja jeg ved det er lavet men jeg vil prøve selv. !

jeg har type

Type
TIRCChannel = object
  Channel : string;
  Topic : string;
  Users : string;
  end;

Channels: array of TIRCChannel;

Først skal jeg tjekke om den kanal jeg joiner er tilføjet for så skal den bare opdateres eller skal den tilføjes.

for  I:=0  to ArrayLength -1 do
      begin
      if Channels[i].Channel = GetSubstring(msg, '#', ' ') then
        begin
        arrayindex := I;
        end;
      end;

    if arrayIndex <> -1 then
      begin
      Channels[arrayindex].Users := Copy(msg,    Lastdelimiter(':', msg), length(msg));
      end

og hvad hvis den skal slettes?

koden er bare lige nuppet ud af projektet som copy paste men det skulle give en ide !!
Håber det var beskrivende nok
Avatar billede martinlind Nybegynder
14. maj 2002 - 16:01 #1
Du kan IKKE slette et Index i det array, så jeg vil anbefale dig at lave din kode om så du bruger en TObjectList i stedet for et OpenArray den er mere flexibel og nemere at vedligeholde ( slette / tilføje osv )

/Martin
Avatar billede Slettet bruger
14. maj 2002 - 16:03 #2
hvordan bruger man TObjectList ?
kunne du vise et eksempel på at se det igennem for et given ting og så tilføje og slette
Avatar billede martinlind Nybegynder
14. maj 2002 - 16:08 #3
Du bruger den lige som TStringList, den eneste forskel er at det er Object du indsætter i stedet for String
Avatar billede tormork Nybegynder
14. maj 2002 - 18:01 #4
Først skal jeg lige sige at der er et par fine functioner til dynamiske arrays:
  High(DArray) returnerer det sidste index (-1 hvis den er tom)
  Low(DArray) returnere det første index (Altid 0 for dynamiske arrays)
  Length(DArray) returnere antal elementer (Altid High(DArray)+1 for dynamiske arrays)
  SetLength(DArray, x) Sætter længden til x.

Det er måske nemmera at bruge en TStringList, den kan også bruge objecter. Så kan du bruge StringList.AddObject(Copy(msg, Lastdelimiter(':', msg), length(msg)), User). Nu kan du bruge stringlist.indexof(streng) for at find kanalen igen. (ps. stringlist.find() virker kun hvis stringlisten er sorteret)

Hvis du vil slette element nr. n i en dynamisk array må du bruge:
  Channels[n] := Channels[high(Channels)];
  SetLength(Channels, Length(Channels)-1);
dvs. flytte det sidst element til position n og fjerne det sidste.

Hvis du vil tilføje må du også sætte array'ens længde op, således:
  SetLength(Channels, Length(Channels)+1):
  Channels[high(Channels)] := TChannel.Create;
  osv.
Avatar billede Slettet bruger
14. maj 2002 - 18:06 #5
hm tak for svarene jeg skal lige teste jeres svar så ser jeg lige om det er svar nok.

Bemærk at det er en type som senere skal have flere oplysninger end bare channel name og derfor kan det vel ikke bruges Tstringlist
Avatar billede martinlind Nybegynder
14. maj 2002 - 18:11 #6
Jo du kan meget vel bruge TStringList, og gøre som Tormork foreslår, så har du en nem måde at søge efter dine objecter, nemli' via "Navnet", "resten" af obj. lægger du i Objects property'en.

/Martin
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