Results 1 to 9 of 9

Thread: TDictionary met record type als value

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747

    TDictionary met record type als value

    Kan dit?
    Delphi Code:
    1. type tfoo = record
    2.   foo1 : string;
    3.   foo2 : integer;
    4. end;
    5.  
    6. var foo : Tdictionary(<string>,<tfoo>);
    Delphi is great. Lazarus is more powerfull

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Tdictionary<string,tfoo>;

    maar dat gaat ja. Of het doet wat je wilt is iets anders. Er wordt namelijk van records een binary hash berekend. dus over de pointer waarde van de string. Als je dat niet wilt moet je een of ander comperator interface implementeren iirc.

    Een beetje neuzen in generics.collections source en je komt er wel uit (zit ff achter een bak zonder delphi, kan dus niet makkelijk nazien).

  3. #3
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Tss, ik slaag er tot nu toe nog altijd in alles zonder generics te doen in het dagelijks leven. Ik begin oud te worden, duidelijk van de vorige generatie. Dat gezegd zijnde, het ouderwetste antwoord op je vraag is gou'e ou'e TStringList en meer bepaald de Objects array property, en de AddObject method. Als je Sorted:=true en Duplicates:=dupIgnore zet, dan krijg je zo gratis een behoorlijk degelijke key-lookup cadeau.

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Wel, hoe "gratis" dat is merk je wel als je 1000000 random strings in zo'n sorted Tstringlist stopt.

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Natuurlijk kan het met een tstringlist (bijna) ook (volgens mij geen records). Maar wat je zegt, je moet met de tijd mee. Ik zie Tdictinary dan ook als een advanced TStringlist
    Delphi is great. Lazarus is more powerfull

  6. #6
    Je kan prima een Record toevoegen met AddObject in een TStringList. Als Pointer.

  7. #7
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Ik bedoel dat je er 'gratis' een implementatie van a/b-zoekalgoritme bij krijgt. Het zoeken zelf is not altijd O(log n) natuurlijk

  8. #8
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Quote Originally Posted by develyoy View Post
    Ik bedoel dat je er 'gratis' een implementatie van a/b-zoekalgoritme bij krijgt. Het zoeken zelf is not altijd O(log n) natuurlijk
    Tis niet het zoeken dat het probleem is, maar de ordered insert. Die is O(n*log n)

  9. #9
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Het is niet aan te raden. Nu kan het zijn dat ik gebruik moest maken van packed record.
    Tijdens het vullen van de TDictionary ging het allemaal wel goed. Maar toen moest ik de gevonden data verwerken in een dataset en gooide mijn integers door elkaar heen. Record vervangen door class en alles klopt.
    Delphi is great. Lazarus is more powerfull

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •