2010-08-20 5 views
0

À des fins de diagnostic, je souhaite imprimer une matrice (un tableau de tableaux). Pour faire cela avec une boucle signifie l'exécution d'une commande de suivi plusieurs fois, ce qui à mon sens — exclut la possibilité d'imprimer plusieurs cellules de tableau à une seule ligneAS3 trace w/out newline

(Lors du codage trace(x); trace(y);, un saut de ligne se situe entre x et y.)

Que puis-je faire?

Répondre

1

Le code suivant ...

var jaggedArray:Array = new Array(new Array(" 1 "," 2 ", " 3 "), new Array(" 3 ", " 4 ", " 5 ")); 
var output:String = ""; 
for(var i:Number = 0; i < jaggedArray.length; ++i){ 
    for(var j:Number = 0; j < jaggedArray[i].length; ++j){ 
      output += jaggedArray[i][j]; 
    } 
    output += "\n"; 
} 
trace(output); 

... produit la sortie suivante:

alt text

Est-ce que vous cherchez? Si c'est le cas, n'utilisez pas la concaténation de chaîne laide comme je l'ai fait, il est préférable d'utiliser un tampon comme décrit in the SO question.

Un tableau irrégulier est un tableau dont les éléments sont des tableaux. Il a la particularité que ses éléments peuvent être de taille différente.

+0

Mis à jour désolé ma réponse se chevauchait. – Wes

+0

Merci! Upvoted vôtre aussi, car c'est aussi correct. – jdecuyper

1

Vous pouvez utiliser "\n" pour diviser une instruction de trace en plusieurs lignes. Je ne suis pas tout à fait certain si c'est ce que vous demandiez dans votre question.

Si vous utilisez flex, vous pouvez utiliser ObjectUtil.toString() pour convertir un objet (tableaux imbriqués) en une représentation sous forme de chaîne.

Si vous demandez comment imprimer une ligne avec plusieurs traces, je suggère d'abord de convertir en une chaîne. Imaginez que vous avez une matrice cassée dans un tableau de lignes. Notez que ce code n'est pas testé, il peut y avoir des fautes de frappe. Il fonctionne également sous l'hypothèse que votre tableau externe contient un tableau d'objets String, ce qui peut ne pas être le cas mais cela devrait aider et peut être converti pour d'autres types de données.

var rowText:String = ""; 
trace ("BEGIN tracing rows"); 
for each (var row:Array in rows) 
{ 
    for each (var value:String in row) 
    { 
     rowText = rowText + value + " "; 
    } 
    trace (rowText); 
} 
trace("END tracing rows"); 
+0

Si c'est la dernière partie de cette réponse dont vous avez besoin, veuillez accepter la réponse de jdecuyper. Cette réponse était la première et est fondamentalement la même. Je ne l'ai pas vu avant de continuer à éditer ma réponse qui n'incluait la partie "\ n" qu'à l'origine. – Wes

1
var x:int=10, y:int=x/2, z:int=y*2; 
// trace as single space-delimited line: 
trace(x, y, z); // 10 5 10 

mais pour les tableaux que vous pouvez le faire comme ça:

var a1:Array = [1, 2, 35678]; 
var a2:Array = [124, 5, 6]; 
var a3:Array = [7, 128, 9]; 
var mtx:Array = [a1, a2, a3]; 
for each(var row:Array in mtx) { 
    trace(row.join('\t')); 
    // or use delimiter function 
    // to right align values... 
} 
1

Pour résoudre ce problème, personnellement, je viens de faire une nouvelle classe qui me permet d'écrire à la classe; puis exécutez la commande de trace:

public class TraceHolder { 

    private var txt:String = ""; 

    public function TraceHolder() { 
     // constructor code 
    } 
    public function writeTo(inStrg:String) : void 
    { 
     txt = txt.concat(inStrg); 
    } 
    public function execute() : void 
    { 
     trace(txt); 
     txt = ""; 
    } 

} 

Ce Alors me permet de le faire:

var th:TraceHolder = new TraceHolder(); 
th.writeTo("blah blah blah the front of the line"); 
th.writeTo("blah blah blah"); 
th.writeTo("blah blah blah end of the line"); 
th.execute(); 

Which'd trace ceci:

blah blah blah the front of the lineblah blah blahblah blah blah end of the line 

simple, efficace et sacrément utile.