Tableaux indexé

Résolu
Signaler
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006
-
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006
-
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

Messages postés
215
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
1 septembre 2006

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
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

les indice 8 20 40 sont-il fixe ?

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

yvessimon
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006

Oui, dans un premier temps, les indices peuvent être fixe.


Dimdidi
Messages postés
215
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
1 septembre 2006

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
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
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
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006

Ca marche nickel

Merci à tous

Dimdidi
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
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
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006

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