Tableaux multidimensionnels
#1
Hello ici.

Pour une fois, j'ai besoin d'aide, ça change les habitudes.

Je dois stocker, pour un jeu, des informations sur les personnages. Les personnages appartiennent à des joueurs (jusque là c'est normal) et un même joueur peut avoir plusieurs personnages.

Un personnage se définit (pour faire simple) par un pseudo et un royaume.
J'envisageait de faire un tableau de la forme (je l'écris au format PHP):
Code :
$chars = array(
   'nick1' => array(
      0 => array('pseudo' => 'Machin', 'realm' => 'Royaume1'),
      1 => array('pseudo' => 'MachinBis', 'realm' => 'Royaume1')
   ),
   'nick2' => array(
      0 => array('pseudo' => 'MaMachin', 'realm' => 'Royaume1'),
      1 => array('pseudo' => 'MaMachinBis', 'realm' => 'Royaume2')
   )
);

J'ai essayé de faire une création de ce tableau avec une procédure (les données venant d'un fichier):
TCL
# $line est de la forme:
# nick|pseudo|realm
 
foreach line [split $wdata "\n"] {
   set char [split $line "|"]
   if { [array exists [namespace current]::chars([lindex $char 0])]} {
      putlog "Info exists"
      set val [array size [namespace current]::chars([lindex $char 0])]
      putlog "Setted"
   } else {
      set val 0
   }
   set  [namespace current]::chars([lindex $char 0])($val)(pseudo) [lindex $char 1]
   set [namespace current]::chars([lindex $char 0])($val)(realm) [lindex $char 2]
}


Ca ne marche pas, je cherche un autre moyen de stocker mes données (utilisation de dict ?), si vous avez des idées je suis preneur.
Répondre
#2
Un array est inadapté pour faire ça.
Tu pourrais faire simplement une liste imbriquée :
{{pseudo {perso1 realm1} {perso2 realm2} {...}} {pseudo {perso1 realm1} {perso2 realm2} {...}}}

La plupart des fonctions de traitement de listes permettent l'utilisation de listes imbriquées, par exemple lsearch prend le paramètre -index, lindex accepte plusieurs index afin de pointer une sous-sous-sous liste si nécessaire, etc.
Répondre Avertir
#3
Après des réflexions meuchantes à mon égard, je réponds:
Comme dit sur IRC, je testerai dès que possible et je dirai ce qu'il en est en même temps. Mais là, je n'ai vraiment pas eu le temps de m'y remettre Smile

This wasn't a wind Smile
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté