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

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

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

Регистрация: Jan 2011
Сообщений: 247
Cool Сдвиг елементов двухмерного массива

Облазил в инете везде, и нашел только вставку\удаление\перемещение одномерного массива, а как это осуществить в двухмерном массиве примеров в избытке.
Суть вопроса в том как правильно написать функцию которая будет "сдвигать" елементы массива "вниз или вверх" .
Код AS3:
private var a:Array = ["a1", "a2", "a3", "a4"];
private var b:Array = ["b1", "b2", "b3", "b4"];
private var c:Array = ["c1", "c2", "c3", "c4"];
private var d:Array = ["d1", "d2", "d3", "d4"];
 
private var myArray:Array = [[a], [b], [c], [d]];
 
// после вызова функции двухмерный массив myArray должен выглядить так :
 
["a1", "a2", "a3", "d4"];// нижний елемент массива "d4" не удалился а переместился сюда на "пустое место"
["b1", "b2", "b3", "a4"];// т.е. при каждом вызове функции, 4 колона должна сдвигаться на 1 елемент вниз( не знаю как это технически обьяснить ;) )
["c1", "c2", "c3", "b4"];
["d1", "d2", "d3", "c4"];

Старый 20.04.2013, 18:42
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Для чего это нужно?
Попахивает задачей из разряда, лучше выкинуть, и придумать совершенно другой способ. Но, тем не менее. Каков алгоритм смещения? Что должно быть после второго, третьего, четвертого.. и т.д. вызова?

Старый 20.04.2013, 19:02
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 3  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Может тогда лучше "перевернуть" массив, чтобы он выглядел так, и легче будет решить задачу
Цитата:
["a1", "b1", "c1", "d1"];
["a2", "b2", "c2", "d2"];
["a3", "b3", "c3", "d3"];
["a4", "d4", "c4", "d4"]; << менять тут
Только вы соединили двумерный массив не правильно, вы лишний раз завернули каждый массив в ещё один массив.

ps.Визуально похоже на игровой автомат "однорукий бандит"


Последний раз редактировалось samana; 20.04.2013 в 19:24.
Старый 20.04.2013, 23:52
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 4  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Для чего это нужно?
Попахивает задачей из разряда, лучше выкинуть, и придумать совершенно другой способ. Но, тем не менее. Каков алгоритм смещения? Что должно быть после второго, третьего, четвертого.. и т.д. вызова?
например какой способ ?
алгоритм смещения :
Код AS3:
["a1", "a2", "a3", "a4"];
["b1", "b2", "b3", "b4"];
["c1", "c2", "c3", "c4"];
["d1", "d2", "d3", "d4"];
 
// первый вызов функции и результат 
 
["a1", "a2", "a3", "d4"];
["b1", "b2", "b3", "a4"];
["c1", "c2", "c3", "b4"];
["d1", "d2", "d3", "c4"];
 
// второй вызов функции и результат
 
["a1", "a2", "a3", "c4"];
["b1", "b2", "b3", "d4"];
["c1", "c2", "c3", "a4"];
["d1", "d2", "d3", "b4"];
 
// третий вызов функции и результат
 
["a1", "a2", "a3", "b4"];
["b1", "b2", "b3", "c4"];
["c1", "c2", "c3", "d4"];
["d1", "d2", "d3", "a4"];
 
// ну если еще раз вызвать функцию то вернемся к изначальному виду
 
["a1", "a2", "a3", "a4"];
["b1", "b2", "b3", "b4"];
["c1", "c2", "c3", "c4"];
["d1", "d2", "d3", "d4"];
Добавлено через 4 минуты
Цитата:
Сообщение от samana Посмотреть сообщение
Может тогда лучше "перевернуть" массив, чтобы он выглядел так, и легче будет решить задачу
Нет интересует именно колонна а не ряд.
Цитата:
Сообщение от samana Посмотреть сообщение

Только вы соединили двумерный массив не правильно, вы лишний раз завернули каждый массив в ещё один массив.
так и есть , а как правильно сделать ?
Цитата:
Сообщение от samana Посмотреть сообщение
ps.Визуально похоже на игровой автомат "однорукий бандит"
визуально да, что-то похожее есть типа крутиться как барабан, ну это совсем не игровой автомат.

Старый 21.04.2013, 00:22
MOHCTEP вне форума Посмотреть профиль Отправить личное сообщение для MOHCTEP Найти все сообщения от MOHCTEP
  № 5  
Ответить с цитированием
MOHCTEP

Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
Код AS3:
var a:Array = [
			["a1", "a2", "a3", "a4"],
			["b1", "b2", "b3", "b4"],
			["c1", "c2", "c3", "c4"],
			["d1", "d2", "d3", "d4"]];
			tracer(a);
			shiftulator(a);
			tracer(a);
			shiftulator(a);
			tracer(a);
			shiftulator(a);
			tracer(a);
			shiftulator(a);
			tracer(a);
//
function tracer(arg:Array):void {
			for (var i:String in arg) trace(arg[i]);
			trace('**************************\n');
		}
//:))
function shiftulator(arg:Array):void {
			var ind:int = arg[0].length - 1, tmp:Array=[];
			for (var i:String in arg) tmp.push(arg[i][ind]);
			tmp.unshift(tmp.pop());
			for (i in arg) arg[i][ind] = tmp[i];
		}
Код:
output:
a1,a2,a3,a4
b1,b2,b3,b4
c1,c2,c3,c4
d1,d2,d3,d4
**************************

a1,a2,a3,d4
b1,b2,b3,a4
c1,c2,c3,b4
d1,d2,d3,c4
**************************

a1,a2,a3,c4
b1,b2,b3,d4
c1,c2,c3,a4
d1,d2,d3,b4
**************************

a1,a2,a3,b4
b1,b2,b3,c4
c1,c2,c3,d4
d1,d2,d3,a4
**************************

a1,a2,a3,a4
b1,b2,b3,b4
c1,c2,c3,c4
d1,d2,d3,d4
**************************

Старый 21.04.2013, 00:32
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 6  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Ну как бы влоб: просто меняем занчения

Код AS3:
		private function swapElements(array:Array, i1:int, j1:int, i2:int, j2:int):void
		{
			var cash:* = array[i1][j1];
			array[i1][j1] = array[i2][j2];
			array[i2][j2] = cash;
		}
 
		private function moveUp(array:Array, i1:int, j1:int):void
		{
			var nextIndex:int = j1 != 0 ? j1 - 1 : array.length - 1; //Если в вверху, то перемещаем вконец
			swapElements(array, i1, j1, i1, nextIndex)
		}
 
//Аналагчино:
		private function moveLeft(array:Array, i1:int, j1:int):void
		private function moveRight(array:Array, i1:int, j1:int):void
		private function moveDown(array:Array, i1:int, j1:int):void
__________________
...

Старый 21.04.2013, 01:21
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 7  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от MOHCTEP Посмотреть сообщение
Код AS3:
function shiftulator(arg:Array):void {
			var ind:int = arg[0].length - 1, tmp:Array=[];
			for (var i:String in arg) tmp.push(arg[i][ind]);
			tmp.unshift(tmp.pop());
			for (i in arg) arg[i][ind] = tmp[i];
		}
Огромное спасибо, именно то что нужно

Добавлено через 1 минуту
Цитата:
Сообщение от Александр Мостовой Посмотреть сообщение
Код AS3:
		private function swapElements(array:Array, i1:int, j1:int, i2:int, j2:int):void
		{
			var cash:* = array[i1][j1];
			array[i1][j1] = array[i2][j2];
			array[i2][j2] = cash;
		}
 
		private function moveUp(array:Array, i1:int, j1:int):void
		{
			var nextIndex:int = j1 != 0 ? j1 - 1 : array.length - 1; //Если в вверху, то перемещаем вконец
			swapElements(array, i1, j1, i1, nextIndex)
		}
ваш способ меняет только два елемента

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

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

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


 


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


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