Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Riempire un array in maniera casuale

    Chiedo scusa, ma ho un quesito che per alcuni potrà sembrare banale ma che a me crea non pochi grattacapi e che nasce da due problemi:
    1) Le matrici non mi vogliono entrare in testa ;
    2) Non funziona la funzione "Cerca" nel forum ;
    ...spero quindi di non dare luogo a spiacevoli doppioni, con questa discussione...

    La cosa è che avrei nove stringhe che dovrei inserire in maniera casuale all'interno di un array, in modo però che non abbiano a ripetersi.
    Siano le stringhe, ad esempio, "Zero", "Uno", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette" e "Otto", io vorrei ottenere una matrice tipo queste:

    Uno-Tre-Sette-Otto-Cinque-Due-Quattro-Zero-Sei
    Sei-Zero-Tre-Uno-Cinque-Due-Otto-Quattro-Sette
    etc... etc...

    Mentre -quasi per caso, direi - al meglio sono riuscito ad ottenere cose tipo:
    Uno-Uno-Quattro-Sei-Due-Sei-Quattro-Zero-Uno
    ...ovvero una matrice che contiene delle stringhe utilizzate più volte e che non comprende per niente alcune stringhe...

    Un grazie a chi c'ha capito qualcosa e può aiutarmi...

  2. #2
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    codice:
    Array.prototype.shuffle = function()
    {
    	var o = this.slice();
    	var m = new Array();
    	var l = o.length;
    	for(var i = 0; i < l; i++)
    	{
    		m.push(o.splice(random(o.length), 1));
    	}
    	return m;
    };
    
    var originale = ["Zero", "Uno", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto"];
    var mischiato = originale.shuffle();
    trace(originale);
    trace(mischiato);

  3. #3
    Intanto perchè funziona alla grande, e quindi sei un benefattore...
    Dopodichè vedrò anche di studiarmelo un po', perchè così di primo acchito non l'ho compreso appieno...
    Ancora grazie mille!

  4. #4
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    codice:
    /*
    	definiamo un nuovo metodo, del tutto inventato,
    	che permette di mescolare gli elementi di un array
    	restituendone uno nuovo
    	per fare questo, aggiungiamo una funzione all'oggetto
    	prototype della classe Array
    */
    Array.prototype.shuffle = function()
    {
    	/*
    		creiamo innanzitutto un nuovo array
    		temporaneo, identico all'originale
    		(lo slice senza argomenti restituisce
    		una copia identica)
    	*/
    	var o = this.slice();
    	/*
    		creiamo un nuovo array vuoto, nel quale
    		mettere gli elementi selezionati a caso
    	*/
    	var m = new Array();
    	/*
    		recuperiamo e salviamo in una variabile
    		la lunghezza dell'array originale
    	*/
    	var l = o.length;
    	/*
    		eseguiamo un loop con tante ripetizioni
    		quanti sono gli elementi dell'array originale
    	*/
    	for(var i = 0; i < l; i++)
    	{
    		/*
    			scomponiamo la riga in una serie
    			di istruzioni più brevi e più chiare
    
    			m.push(o.splice(random(o.length), 1));
    		*/
    		/*
    			prendiamo un numero casuale compreso tra
    			0 e la lunghezza dell'array: dal momento
    			che toglieremo, di volta in volta, un
    			elemento dall'array copia per aggiungerlo
    			a quello nuovo, la lunghezza di "o" è
    			sempre minore: quindi, ad esempio, la prima
    			volta il numero random sarà compreso tra 0 e 9,
    			la seconda tra 0 e 8, la terza tra 0 e 7 e
    			così via
    		*/
    		var numero_casuale = random(o.length);
    		/*
    			estraiamo un elemento dall'array o: il metodo splice
    			
    				lista.splice(posizione, quanti)
    
    			toglie quanti elementi dall'array lista a partire
    			dall'indice posizione
    			toglie in questo caso 1 elemento a partire dall'indice
    			"numero_casuale", cioè quell'elemento il cui indice
    			è il numero estratto a caso nella riga precedente:
    			da notare che questo numero, la prossima volta, non
    			sarà presente nella lista, dato che splice rimuove
    			l'elemento dall'array "o"
    		*/
    		var elemento_estratto = o.splice(numero_casuale, 1);
    		/*
    			infiliamo nell'array "m" l'elemento appena estratto
    			dall'array "o": l'elemento, quindi, viene scelto a
    			caso, e spostato da un array all'altro
    		*/
    		m.push(elemento_estratto);
    	}
    	/*
    		restituiamo l'array appena creato
    	*/
    	return m;
    };
    var originale = ["Zero", "Uno", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto"];
    var mischiato = originale.shuffle();
    trace(originale);
    trace(mischiato);

  5. #5
    Che dire?
    Una spiegazione più che esaustiva...
    Ancora grazie!

  6. #6
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Di niente... :)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.