Objet mapping équivalent à un QMap Qt [Résolu]

Messages postés
308
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
- - Dernière réponse : Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
- 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.
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
1015
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Guillemouze
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32
3
Merci
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]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
Messages postés
308
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
0
Merci
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.
Commenter la réponse de beckerich