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

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

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

Регистрация: Jan 2006
Сообщений: 54
По умолчанию как рандомно переставить элементы в массиве?

Есть массив, состоящий например из 50 элементов, каждому из этих элементов присвоено значение от 1 до 50, как переиначить массив так, чтобы все эти цифры в нём рандомно перемешались?


Последний раз редактировалось WWWD; 08.06.2006 в 15:29.
Старый 08.06.2006, 12:36
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 2  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
всё зависит от задачи.
в принципе есть два варианта задачи:
произвольный и с обязательством не оставить ни одного на прошлом месте. надеюсь, первое.
тогда элементарно: идем сюда и ищем по слову shuffle

Старый 08.06.2006, 12:50
AlexSol вне форума Посмотреть профиль Отправить личное сообщение для AlexSol Найти все сообщения от AlexSol
  № 3  
Ответить с цитированием
AlexSol

Регистрация: Dec 2005
Сообщений: 316
Код:
array.sort(sort);
function sort(a:Object, b:Object):Number {
	return (Math.random()<.5) ? -1 : 1;
}

Старый 08.06.2006, 12:51
Cvazimodo вне форума Посмотреть профиль Отправить личное сообщение для Cvazimodo Найти все сообщения от Cvazimodo
  № 4  
Ответить с цитированием
Cvazimodo

Регистрация: Jan 2003
Сообщений: 365
Если это массив объектов, то его можно сортировать по одному из параметров этих объектов.


Код:
var MyArray:Array = new Array();
var elem:Object = new Object();

for (var ii:Number=0; ii<50; ii++) {
	elem = {key: random(1000), value:ii};
	MyArray.push(elem);
}
MyArray.sortOn('key');

for (ii=0; ii<50; ii++) {
  // выводит уже "случайные" элементы массива
	trace(MyArray[ii].value);
}

Я делал это в задаче "тасования" карт в колоде (игрушку делал).


Последний раз редактировалось Cvazimodo; 08.06.2006 в 12:53.
Старый 08.06.2006, 13:06
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 5  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
2AlexSol: предполагается, что если есть ответ выше, то имеет смысл отвечать, если ваш ответ лучше.
2Cvazimondo: предполагается, что ответ имеет отношение к вопросу.

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

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
2AlexSol: я к тому, что мой тест производительности (код ниже) дает разницу в 165 раз.
я бы сидел и не отсвечивал, если бы разница была каких 20%.
Код:
Array.prototype.shuffle = function() {
 var len = this.length;
 var i = len;
 while (i--) {
  var j = random(len);
  var n = this[j];
  this[j] = this[i];
  this[i] = n;
 }
};
function sort(a:Object, b:Object):Number {
 return (Math.random()<.5) ? -1 : 1;
}
// ----------- test
arr = [];
i = 10000;
while (i--) {
 arr[i] = i;
}
t = getTimer();
arr.sort(sort);
trace((getTimer()-t));
t = getTimer();
arr.shuffle();
trace((getTimer()-t));
delete i, delete t;

Старый 08.06.2006, 13:18
Cvazimodo вне форума Посмотреть профиль Отправить личное сообщение для Cvazimodo Найти все сообщения от Cvazimodo
  № 7  
Ответить с цитированием
Cvazimodo

Регистрация: Jan 2003
Сообщений: 365
Цитата:
Есть массив, состоящий например из 50 элементов, каждому из этих элементов присвоено значение от 1 до 50, как переиначить массив так, чтобы все эти цифтры в нём рандомно перемешались?
Я отвечал на этот вопрос. Мой ответ - рандомная сортировка элементов в массиве. В чем расхождение то?

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

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
сравни:
[...] Если это массив объектов [...]
[...] чтобы все эти цифтры в нём [...]

Старый 08.06.2006, 13:27
Cvazimodo вне форума Посмотреть профиль Отправить личное сообщение для Cvazimodo Найти все сообщения от Cvazimodo
  № 9  
Ответить с цитированием
Cvazimodo

Регистрация: Jan 2003
Сообщений: 365
Ну и всё прекрасно. В объекте key для сортировки, а value - цифры, буквы, строки и любые другие объекты...

И, наверно, основной вопрос можно было бы охарактеризовать не как "цифры", а как "рандомная сортировка в массиве". Цифры, элементы массива - детали.


Последний раз редактировалось Cvazimodo; 08.06.2006 в 13:32.
Старый 08.06.2006, 14:04
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 10  
Ответить с цитированием
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
жмём сюда:

в поле "ключевые слова" вводим (не поверите): "случайная сортировка массива"

нажимаем ентер.
получаем одну-единственную тему в результатах.

http://flasher.ru/forum/showthread.p...hlight=shuffle
(обратите внимание на дату создания темы)

там предложена куча вариантов сортировки, разной степени тормознутости и оригинальности. в том числе и вариант, который предложил Ив.

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

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

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


 


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


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