Tableaux indexé

Résolu
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006 - 27 juil. 2005 à 08:30
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006 - 28 juil. 2005 à 15:14
Salut à tous,
Peut être que ma question est toute bête ...

Je voudrais créer un tableau indexé (ou liste chainée) avec mes valeurs et pas systématiquement 0,1,2,3

ex delphi que je voudrais:
var
Tab : array of string;
begin
SetLength(Tab,3);
Tab[8]:='toto';
Tab[20]:='tata';
Tab[40]:='tutu';
end;

Comparaison en PHP
Tab[8]='toto';
Tab[20]='tata';
Tab[40]='tutu';
Voir encore mieux
Tab['coucou']='toto';
Tab['Test']='tata';
Tab['momo']='tutu';

Si quelqu'un à une idée en delphi comment faire, soit par une liste chainée ou soit par un tableau.

Merci d'avance .

Dimdidi

8 réponses

jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
27 juil. 2005 à 10:50
Oui effectivment, avec la TStringlist, tu peux feinter:



Exemple:



procedure TForm1.Button1Click(Sender: TObject);

var ts:TStringList;

begin

ts := TStringList.Create;

ts.Add('toto=coucou');

ShowMessage(ts.Values['toto']);

ts.free;

end;



Cela permet d'avoir une indexation par chaîne.


j!nH
3
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
27 juil. 2005 à 08:41
les indice 8 20 40 sont-il fixe ?

Si non il faut réserver de la place mémoire ..

yvessimon
0
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006
27 juil. 2005 à 09:00
Oui, dans un premier temps, les indices peuvent être fixe.


Dimdidi
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
27 juil. 2005 à 10:22
Tu pourras pas avec un array, car il réserve si possible des blocs de
mémoires contigus. Tu vas donc avoir des réservations inutiles.



Utilises peut être un Set du style type IndicesTab = ( coucou, test, momo).








j!nH
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 2
27 juil. 2005 à 10:39
Les tableaux dynamiques en Delphi ne sont pas comme en php.

En php, il est possible (par la fonction array() ) d'indexer les cases
de son tableau de manière quelconque (et par forcément 0,1,2,3 ...) ou
même avec des chaines.



En php, tes exemples donneraient

$Tab array(8> "toto", 20 => "tata", 40 => "tutu")



ou encore mieux, $Tab array("Coucou"> "toto", "Test" => "tata", "momo" => "tutu")



En Delphi ce n'est pas possible normalement.

Il est cependant possible de "tricher" mais je ne me souviens plus trop comment. (avec un TSTringList).



@ ++

Florent

Si tu ne te plantes pas ......
tu ne poussera jamais
0
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006
27 juil. 2005 à 11:29
Ca marche nickel

Merci à tous

Dimdidi
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 2
27 juil. 2005 à 19:14
Mais cela ne marche que pour imiter un array of string - et pour les
données qui peuvent être stockées sous forme de chaînes - mais dans le
cas d'un record .... c'est une autre histoire



Mais l'important est que cela marche pour toi et que cela résolve ton problème.



@ ++

Florent

Si tu ne te plantes pas ......
tu ne poussera jamais
0
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006
28 juil. 2005 à 15:14
Ok,
Juste une idée qui ouvre beaucoup d'ouverture.
Si vous pouvez me dire ce que vous en pensez (ca fonctionne)

//En Global
TInfo = class (TObject)
public
sValeur1 : string;
sValeur2 : string;
end;

ts : TStringList;

//Fonction
procedure TForm1.Button2Click(Sender: TObject);
var
test:TInfo;
begin
test:=TInfo.Create;
test.sValeur1:='msg';
test.sValeur2:='Coucou';
ts:=TStringList.create;
ts.InsertObject(0,'MM',test);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to ts.count-1 do
begin
if (TInfo(ts.Objects[i]).sValeur1='msg') then
ShowMessage(TInfo(ts.Objects[i]).sValeur2);
end
end;

A+


Dimdidi
0