2010-03-17 7 views
1

J'ai un tableau que je veux trier en fonction de la valeur de l'une des valeurs du tableau. La façon dont je veux trier est de distribuer uniformément la valeur que je recherche dans le tableau résultant. Par exemple -Quel est le moyen le plus simple d'échanger des éléments dans un tableau (Actionscript 2.0)

tableau original = [a, b, c, d, 1,2,3,4]

Je veux atteindre - [a, 1, b, 2, c, 3, d , 4]

Je peux m'exercer quand insérer les nombres (nombre total d'items/nombre de nombres) = 2 donc chaque 2ième item devrait être un nombre.

Quelle est la manière la plus simple et la plus efficace de faire ce type de tri?

Répondre

3
var a = [a,b,c,d,1,2,3,4]; 
var half = a.length/2; 
var c = []; 
for(var i = 0; i < half; i++) 
{ 
    c.push(a[i]); 
    c.push(a[half + i]); 
} 
a = c; 

Solution générale:
Set r à la valeur appropriée et assurez-vous que la longueur du tableau correspond à cette valeur. Par exemple, si r est 2, le rapport du nombre de lettres au nombre de chiffres est 2:1 et donc la longueur du tableau, len, doit être un multiple de 3.

function mix(a:Array, r:Number):void 
{ 
    var len1 = a.length * r/(r + 1); 
    var len2 = a.length - len1; 
    var c = []; 
    for(var i = 0; i < len2; i++) 
    { 
    for(var j = 0; j < r; j++) 
     c.push(a[i * r + j]); 
    c.push(a[len1 + i]); 
    } 
    trace(c.join()); 
} 
var r = 2; //two letters per one digit 
//8 letters and 4 digits 
var a = ['a','b','c','d','e','f','g','h','1','2','3','4']; 
mix(a, r) // a,b,1,c,d,2,e,f,3,g,h,4 

r = 3; //three letters per one digit 
//9 letters and 3 digits 
a = ['a','b','c','d','e','f','g','h','i','1','2','3']; 
mix(a, r); // a,b,c,1,d,e,f,2,g,h,i,3 
+0

Merci, mais si ce ne est pas la moitié et la moitié, par exemple si j'ai un tableau - [a, b, c, d, e, f, 1,2] et je veux [a, b, 1, c, d, 2, e, f] – undefined

+0

@ undefined voir ma mise à jour – Amarghosh

+0

Super, merci Amarghosh. – undefined

Questions connexes