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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.06.2010, 14:19
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 1  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
По умолчанию Как из массива в рандомном порядке вывести каждый элемент не повторяясь?

Есть массив определённой длинны, в который внесены строки. Нужно в рандомном порядке отображать эти строки. Вопрос собственно вот в чём - как сделать так что бы индекс генерировался рандомно. Есть у меня скажем массив от 0 до 7 мне надо в рандомном порядке вывести каждый элемент не повторяясь.

у меня вышло вот такая штука, но проблема в том что рандомное число генерирующееся является не целым

Код AS3:
var t:TextField=new TextField;
	t.text=String(Number(photoURL_Array.length*Math.random()));
	addChild(t);
Добавлено через 41 минуту
вроде всё решил таким способом
Код AS3:
var t:TextField=new TextField;
	t.text=photoURL_Array[Math.floor((photoURL_Array.length-1)*Math.random())];
	addChild(t);
только вот как сделать что бы выведенное прежде не повторялось

Старый 23.06.2010, 16:04
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
можно создать второй массив точно такой же длинны и внести в каждый его элемент что то вроде
Код AS3:
{ origIndex: i,  r: Math.random() }
Потом его отсортировать по полю "r"
Код AS3:
arrRnd.sortOn( "r", Array.NUMERIC );
и считывать рандомный неповторяющийся элемент уже из первоночального массива со строками как
Код AS3:
var myString:String = arrOrig[arrRnd[i].origIndex];
В принципе, если не нужна универсальность, то вместо origIndex можно вписывать сразу значения строки. А после сортировки считывать примерно так
Код AS3:
var myString:String = arrRnd[i].origString
Такая вот идея ))


Последний раз редактировалось i.o.; 23.06.2010 в 16:09.
Старый 23.06.2010, 16:05
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 3  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
У массивов есть slice() метод. Вырезаем эелементы которые уже вывел.

Старый 23.06.2010, 17:22
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 4  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
proxiServer, не slice, а splice. slice - делает копию.

Старый 23.06.2010, 17:35
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 5  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
BlooDHounD ну, опечатался как интересно получилось)

Старый 23.06.2010, 20:08
Juice_Green вне форума Посмотреть профиль Отправить личное сообщение для Juice_Green Посетить домашнюю страницу Juice_Green Найти все сообщения от Juice_Green
  № 6  
Ответить с цитированием
Juice_Green
 
Аватар для Juice_Green

Регистрация: Dec 2005
Адрес: Новосибирск
Сообщений: 529
Отправить сообщение для Juice_Green с помощью ICQ Отправить сообщение для Juice_Green с помощью Skype™
как вариант, предлагаю отсортировать массив рандомно и делать pop в цикле.
Если исходный массив не нужен, тогда делать копию массива даже не надо.
Код AS3:
function sortFunc(a:String, b:String):Number{
	return Math.random()>0.5 ? 1 : -1;
}
var testArray:Array = new Array("1", "2", "3", "4", "5", "6");
testArray.sort(sortFunc);
 
var copyTestArray:Array = testArray.slice();
 
while(copyTestArray.length>0){
	trace(copyTestArray.pop());
}

Старый 23.06.2010, 20:13
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 7  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
а зачем делать pop в цикле?

Старый 23.06.2010, 22:46
Juice_Green вне форума Посмотреть профиль Отправить личное сообщение для Juice_Green Посетить домашнюю страницу Juice_Green Найти все сообщения от Juice_Green
  № 8  
Ответить с цитированием
Juice_Green
 
Аватар для Juice_Green

Регистрация: Dec 2005
Адрес: Новосибирск
Сообщений: 529
Отправить сообщение для Juice_Green с помощью ICQ Отправить сообщение для Juice_Green с помощью Skype™
i.o., ну можно и не делать а просто по индексу брать элемент.

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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