Objet mapping équivalent à un QMap Qt

Résolu
beckerich
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
- 21 oct. 2009 à 22:34
Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
- 22 oct. 2009 à 14:46
Bonjour,

je recherche une équivalence dans la vcl ou autre pascal à un objet QMap de Qt.
Cet objet permet le stockage la liste d'une valeur clé et d'une valeur texte par exemple ([1;'un'], [2;"deux"], ...)
et on peut retrouver une valeur par sa clé, parcourir la liste, ...
Je sais que l'on peut gérer cela avec une liste chaînée, mais existe-t-il un objet tout fait dans la libairie de Delphi ?
Merci.
Luc.

3 réponses

Guillemouze
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
22 oct. 2009 à 14:01
alors plusieurs possibilités:
Pour une association ayant une chaine pour clé, tu peux utiliser un descendant de TStrings (TStringList):
SL.AddObject('LaCle', MonObjetAssocié);
MonObjetAssocié := SL.Objects[SL.IndexOf('LaCle')];

ou un TBucketList (ou TObjectBucketList) pour une clé entiere, objet, ... :
BL.Add(Pointer(1), Pointer('Valeur'));
MaValeur := BL.Data[Pointer(1)];


Par contre, si tes valeurs sont des chaines, je ne sais pas comment delphi gere la liberation dans le cas ou elle sont stockées dans un pointer, à verifier.
3
Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
22 oct. 2009 à 14:46
Salut,

TStrings permet bien plus de choses et plus simplement encore.

En fait TStringList peut fonctionner comme un fichier ini:

[hr][b]var

 /bSL: TStrings;
[b]begin
  /bSL :=  TStringList.Create;
  [b]try
    /bSL.Values['Nom'] := 'Toto';
    Label1.Caption := SL.Values['nom'];
  [b]finally
    /bSL.Free;
   end ;
end;
[hr]la ligne SL.Values['Nom'] : = 'Toto'; ajoute une entrée sous la forme "Name=Value Nom=Toto" si 'Name' existe déjà seule Value sera remplacée.
regarde aussi du coté des propriétés :
Names et IndexOfName


[hr]@+Cirec
[hr]
3
beckerich
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
22 oct. 2009 à 14:35
Merci Guillemouze,

je savais qu'on pouvait associer, et je l'utilise dans mes programmes, un objet à un élément d'un TStringList. Je ne retrouve néanmoins pas la simplicité d'utilisation d'un QMap. Il faut faire un transtypage pour écrire ou lire une donnée, que ce soit un objet ou un type standard.
Luc.
0