Toon posts:

[js] multidimensional array verticaal sorteren.

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een array met allemaal nummers, deze nummers vormen rijen, horizontaal en verticaal.
code:
1
2
3
4
5
6
7
8
9
10
var spaces = [];
spaces[0] = [1,1,1,2,2,2,3,3,3]
spaces[1] = [1,1,1,2,2,2,3,3,3]
spaces[2] = [1,1,1,2,2,2,3,3,3]
spaces[3] = [4,4,4,5,5,5,6,6,6]
spaces[4] = [4,4,4,5,5,5,6,6,6]
spaces[5] = [4,4,4,5,5,5,6,6,6]
spaces[6] = [7,7,7,8,8,8,9,9,9]
spaces[7] = [7,7,7,8,8,8,9,9,9]
spaces[8] = [7,7,7,8,8,8,9,9,9]


nu is het de bedoeling dat de verticale rijen random door elkaar gegooit moeten worden.

horizontaal is dat niet zo moeitlijk, dat kan zo:
code:
1
2
3
4
5
6
function randomSort(a,b)
{
    return Math.round(Math.random()*2-1);
}

spaces.sort(randomSort);

alleen ik wil dit veticaal hebben, dus de rijen moeten wel verticaal intact blijven maar wel horizontaal door elkaar gegooit worden.

weet iemand hoe dit moet?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:43

crisp

Devver

Pixelated

Ik denk dat je eerst de array moet 'flippen', dan husselen, en vervolgens weer terug 'flippen'

Intentionally left blank


Verwijderd

Topicstarter
wat bedoel je met 'flippen'?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:43

crisp

Devver

Pixelated

eigenlijk meer transponeren; je wisselt de rijen met de kolommen zeg maar:
code:
1
2
array[0] = [1,2];
array[1] = [3,4];

wordt dan:
code:
1
2
array[0] = [1,3];
array[1] = [2,4];

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 06-05 11:13

André

Analytics dude

Volgens mij bedoeld hij transponeren, dus de verticale rijen horizontaal maken :)

/edit:
spuit 11 :P

[ Voor 13% gewijzigd door André op 12-06-2005 18:11 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:43

crisp

Devver

Pixelated

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array.prototype.transpose = function()
{
    var returnArray = new Array(), key, value, i, j;
    for (key in this)
    {
        i = this[key].length;
        for (i = 0, j = this[key].length; i < j; i++)
        {
            if (!returnArray[i]) returnArray[i] = new Array();
            returnArray[i][key] = this[key][i];
        }
    }

    return returnArray;
}


overigens zijn er ook betere methoden om te husselen ;)

Intentionally left blank


Verwijderd

Topicstarter
kijk bedankt
nu kan ik weer verder puzzelen

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19

BikkelZ

CMD+Z

Ik zou de eerste positie van alle arrays in een nieuwe array zetten, die husselen, alles weer terug zetten en dat herhalen voor de .length van de arrays. Misschien makkelijk als je een array van de arrays maakt, dan kun je ook de .length pakken voor de for loop voor het aantal verticale elementen.

iOS developer

Pagina: 1