Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.02.2014, 18:43
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 1  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
По умолчанию Алгоритм по работе с массивами

Коллеги, подскажите мне удобный алгоритм для следующей задачи:
Есть некий массив обьектов на 10 элементов.
Мне необходимо из него каджую секунду (допустим с помощью setInterval) выбирать один или несколько (2-3) рандомных обьектов, которые бы в свою очередь не совпадали с обьектом/обьектами, выбранными в предыдущей итерации.

С одним обьектом у меня получилось придумать, но как только количество доходит до 2 - начинаются проблемы.

Буду признателен за помощь.

Старый 12.02.2014, 20:27
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код AS3:
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;
 
		}
	}
 
}

Старый 12.02.2014, 20:48
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 3  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Спасибо. На первый взгляд работает идеально. Буду рассматривать детально.

Добавлено через 5 часов 34 минуты
Еще раз спасибо. Очень элегантное решение. Радует, что ход моих мыслей был очень схожим.


Последний раз редактировалось australian incognito; 14.02.2014 в 18:17.
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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