![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Коллеги, подскажите мне удобный алгоритм для следующей задачи:
Есть некий массив обьектов на 10 элементов. Мне необходимо из него каджую секунду (допустим с помощью setInterval) выбирать один или несколько (2-3) рандомных обьектов, которые бы в свою очередь не совпадали с обьектом/обьектами, выбранными в предыдущей итерации. С одним обьектом у меня получилось придумать, но как только количество доходит до 2 - начинаются проблемы. Буду признателен за помощь. |
|
|||||
package { import flash.display.Sprite; public class Main extends Sprite { public function Main():void { var arr:Array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; var res:Array = []; for (var i:int = 0; i < 4; i++) { res = getRandElements(arr, 4, res); trace( "res : " + res ); } } private function getRandElements(arr:Array, n:int, exclude:Array):Array { var i:int; var tmp:Array = arr.concat(); var res:Array = []; // убираем исключаемые for (i = 0; i < exclude.length; i++) { tmp.splice(tmp.indexOf(exclude[i]), 1); } // выбираем из оставшихся for (i = 0; i < n; i++) { var rnd:int = Math.random() * tmp.length; res.push(tmp[rnd]); tmp.splice(rnd, 1); } return res; } } } |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Спасибо. На первый взгляд работает идеально. Буду рассматривать детально.
Добавлено через 5 часов 34 минуты Еще раз спасибо. Очень элегантное решение. Радует, что ход моих мыслей был очень схожим. Последний раз редактировалось australian incognito; 14.02.2014 в 18:17. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:03. |
|
|
« Предыдущая тема | Следующая тема » |
|
|