PDA

Просмотр полной версии : Взять из массива переменную!..


Horror
04.01.2003, 13:13
Есть массив с множеством переменных.
Вопрос - как взять из него все переменные, но в случайном порядке так чтобы переменные не повторялись?

Пример - есть 20 полей. На каждом поле - уникальный мувик. Нужно в случайном порядке расставить их на поля так чтобы они не повторялись.

Darina
04.01.2003, 13:36
Надо сделать так называемое "перемешивание".
Например так:
for(i=0; i<num; i++) M[i]=i;
for(i=0; i<num; i++) {pos=random(num);
tmp=M[i];
M[i]=M[pos];
M[pos]=tmp;}
M - это твой массив, а num - кол-во его элементов

Horror
04.01.2003, 13:49
Понял.
Пасибки, Darina :)

Horror
07.01.2003, 21:33
Периодически рандом повторялся и в итоге некоторые переменные дублировались с затираением других...

Выход нашел так:


function MixArray(array, _array) {
//Обнуляем выходной массив. 0 - признак того что ячейка свободна
for (i = 0; i < array.length; i ++)
_array[i] = 0;

//Смотрим каждый элемент исходного массива
for (i = 0; i < array.length; i ++)
{
//Находим куда ставить элемент в выходной массив
new_pos = random(array.length);

// Если ячейка в выходном массиве занята или вставляем элемент на ту же
// позицию - меняем позицию
while(new_pos == i || _array[new_pos]!=0)
{
new_pos++;
if (new_pos>=array.length)
new_pos = 0;
}
//Вставка элемента на место
_array[new_pos] = array[i];
}
}


Помогли друзья Php-шники... :)