Forums Développement Multimédia

Aller au contenu

Trier plusieurs tableaux

CODE tri array

5 réponses à ce sujet

#1 RamsesXX

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 117 messages

Posté 28 January 2016 - 07:23 AM

Bonjour,

Une question concernant le tri des tableaux. J'ai plusieurs tableaux et je veux randomiser les tableaux 2 et 3 d'après l'ordre du tableau 1.

tab_1 = ("question 1", "question 2", "question 3", "question 4")
tab_2 = ("réponse 1", "réponse 2", "réponse 3", "réponse 4")
tab_3 = ("indice 1", "indice 2", "indice 3", "indice 4")

Je ne sais pas si je m'exprime bien. Je veux :
1) faire un shuffle sur le tableau 1
et 2) retrouver les correspondances sur les tableaux 2 et 3. Et donc mon cas, même, j'ai plutôt 7 ou 8 tableaux au total.

Est-ce qu'il existe un moyen simple (pour moi simple ça veut dire sans maths:-) de faire ça en AS3 ?

#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 28 January 2016 - 09:16 AM

Bonjour Ramses.

Excuses-moi, mais je ne vois pas la difficulté de ton problème…
Pour 'shuffeliser" un tableau, tu tires sans doute un indice aléatoire. Quand tu as cet indice, tu permutes (ou tu reconstruits) un tableau. A ce moment là, tu peux appliquer la même permutation ou (reconstruction) à tous tes tableaux.

Dis nous comment fais-tu pour mélanger un tableau ?

#3 RamsesXX

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 117 messages

Posté 28 January 2016 - 09:29 AM

Bonjour,

En fait j'étais embêté car il n'y a pas du fonction native pour randomiser un tableau en AS3 je crois. En cherchant mieux j'ai finalement trouvé la solution. Voici le code :


var tab_1:Array=new Array(1,2,3,4,5)
var tab_2:Array=new Array("a","b","c","d","e")
var tab_3:Array=new Array("A","B","C","D","E")
var regroupement_tab:Array = new Array();
for(var i=0; i<tab_1.length; i++)
{
regroupement_tab.push({tab1:tab_1[i],tab2:tab_2[i], tab3:tab_3[i]});
}
var tableau_randomisé:Array = new Array;
while (regroupement_tab.length > 0) {
    tableau_randomisé.push(regroupement_tab.splice(Math.round(Math.random() * (regroupement_tab.length - 1)), 1)[0]);
}
//
for(var j=0; j<tableau_randomisé.length; j++)
{
trace (tableau_randomisé[j].tab1 + tableau_randomisé[j].tab2 + tableau_randomisé[j].tab3)
}
/*
5eE
2bB
4dD
3cC
1aA
*/

 

La grosse ligne de maths au milieu trouvée sur le web...

#4 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 28 January 2016 - 09:53 AM

Bravo !

Sinon, je ne suis pas fan mais ça, c'est pas grave ;)

2 propositions :

Méthode 1 :
travailler avec des objets, chaque objet étant construit pour contenir les différentes valeurs (vision horizontale : une valeur de chaque tableau.
Par exemple :
var objet:Object = {indice : 1; minuscule : "a"; majuscule : "A"}
Tout tes objets tiennent dans un seul tableau que tu peux shuffeliser simplement (voir pour ça la méthode ci-dessous).
NB : il y a beaucoup d'avantages à cette méthode, comme par exemple de pouvoir rajouter facilement un item sans avoir à aller modifier plusieurs lignes de code, rajouter une valeur sans avoir a faire suivre un tableau supplémentaire… C'est cette méthode que je choisirais.

Méthode 2 :
Utiliser la méthode de mélange proposée par Badwold ici et l'adapter pour trier tous tes tableaux, comme ceci par exemple :
var nbr_tableaux:int;
var nbr_valeurs:int;
var alea:int;
var temporaires:Array = [];

var test:Array = [
        ["a1","a2","a3","a4"],
        ["b1","b2","b3","b4"],
        ["c1","c2","c3","c4"],
        ["d1","d2","d3","d4"],
        ["e1","e2","e3","e4"]
];

melanger(test);
for each (var t:Array in test) trace (t);

function melanger (tableaux:Array):void {
  nbr_tableaux = tableaux.length;
  nbr_valeurs = tableaux[0].length;

  while (nbr_valeurs > 1) {
   alea = Math.random() * nbr_valeurs--;
   // et pour chaque tableau :
   for (var i:int = 0; i<nbr_tableaux; i++) {
        temporaires[i] = tableaux[i][alea];
        tableaux[i][alea] = tableaux[i][nbr_valeurs];
        tableaux[i][nbr_valeurs] = temporaires[i];
   }
  }
}
Méthode propre et très rapide.

Méthode 3 (bonus)
Si l'un de tes tableaux ne contient que des indices, comme tab_1 dans ton exemple, il te suffit de le mélanger, puis de reconstruire les autres en te servant de ses indices

#5 RamsesXX

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 117 messages

Posté 28 January 2016 - 23:53 PM

Merci beaucoup pour les explications sur les objets !

#6 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1786 messages

Posté 29 January 2016 - 18:48 PM

L'autre avantage d'un tableau d'objets est d'utiliser sortOn(), et de trier le tableau en fonction des propriétés (colonnes).



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP