Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Взять из массива переменную!.. (http://www.flasher.ru/forum/showthread.php?t=41503)

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-шники... :)


Часовой пояс GMT +4, время: 18:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.