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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 23.01.2012, 02:06
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 20  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
package tld.doodles.collections
{
	public class Array2D
	{
		public static const COLUMN:Array2D = new Array2D();
 
		public static const ROW:Array2D = new Array2D();
 
		public function get length():uint { return this._items.length; }
 
		public function get columns():uint { return this._columns; }
 
		public function get rows():uint
		{
			return this._items.length / this._columns;
		}
 
		protected const _items:Array = [];
 
		protected var _columns:uint;
 
		public function Array2D() { super(); }
 
		public static function make(columns:uint, 
			rows:uint = 0, array:Array = null):Array2D
		{
			var result:Array2D = new Array2D();
 
			if (!array) array = []; 
			result._columns = columns;
			array.length = Math.max(array.length, columns * rows);
			result._items.push.apply(result, array);
			return result;
		}
 
		public static function get(array:Array2D, x:uint, y:uint):Object
		{
			return array._items[x * array._columns + y];
		}
 
		public static function set(array:Array2D, x:uint, y:uint, 
			value:Object):Object
		{
			return array._items[x * array._columns + y] = value;
		}
 
		public static function insertColumns(array:Array2D, 
			position:uint, howMany:uint, feeder:Function):Array2D
		{
			var times:uint = array.rows;
			for (var i:int; i < times; i++)
				array._items.splice.apply(
					array._items, 
					[position + howMany * i + array._columns * i, 0].concat(
						new Array(howMany).map(feeder)));
			array._columns += howMany;
			return array;
		}
 
		public static function insertRows(array:Array2D, 
			position:uint, howMany:uint, feeder:Function):Array2D
		{
			array._items.splice.apply(
				array._items, [position * array._columns, 0].concat(
					new Array(howMany * array._columns).map(feeder)));
			return array;
		}
 
		public static function forEach(array:Array2D, kind:Array2D, 
			callback:Function):Array2D
		{
			var element:Array;
			var iterations:uint;
 
			if (kind == COLUMN)
			{
				iterations = array._columns;
				for (var i:int; i < iterations; i++)
				{
					callback(fetchColumn(
						i, array._columns, array._items, element), i);
					setColumn(array, i, element);
				}
			}
			return array;
		}
 
		public static function setColumn(array:Array2D, column:uint, 
			elements:Array):Array2D
		{
			var arrayLength:uint = array.length;
 
			for (var i:int; column < arrayLength; column += array._columns, i++)
				array._items[column] = elements[i];
			return array;
		}
 
		public static function setRow(array:Array2D, row:uint, 
			elements:Array):Array2D
		{
			elements.length = array._columns;
			array._items.splice.apply(
				array._items, [row * array._columns, elements.length]
					.concat(elements));
			return array;
		}
 
		private static function fetchColumn(offset:uint, step:uint, 
			source:Array, destination:Array):Array
		{
			destination.length = 0;
			var sourceLength:uint = source.length;
			for (; offset < sourceLength; offset += step)
				destination.push(source[offset]);
			return destination;
		}
 
		private static function fetchRow(row:uint, rowLength:uint, 
			destination:Array, source:Array):Array
		{
			var start:uint = row * rowLength;
			var end:uint = start + rowLength;
 
			destination.length = 0;
			for (var j:int, i:int = start; i < end; i++, j++)
				destination[j] = source[i];   
			return destination;
		}
 
		public static function print(array:Array2D):String
		{
			var filler:String;
			var top:String;
			var bottom:String;
			var rows:Array = [];
			var totalRows:uint = array.rows;
			var row:Array = [];
			var maxLength:uint;
			var rowString:String;
			var column:Array = [];
			var mask:Array = [];
			var columnsDestination:Array = new Array(array.rows + 1).join("&#9474;").split("");
			var j:uint;
 
			for (var i:uint; i < array._columns; i++)
			{
				column = fetchColumn(i, array._columns, array._items, column);
				maxLength = 0;
				for (j = 0; j < totalRows; j++)
				{
					if (i == array._columns - 1)
						column[j] = rowString = " " + String(column[j]);
					else column[j] = rowString = " " + String(column[j]) + ",";
					maxLength = Math.max(maxLength, rowString.length);
				}
				for (j = 0; j < totalRows; j++)
				{
					rowString = column[j];
					mask.length = (maxLength - rowString.length) + 1;
					columnsDestination[j] += rowString + mask.join(" ");
					if (i == array._columns - 1)
						columnsDestination[j] += " &#9474;\n"; 
				}
			}
			filler = new Array(String(columnsDestination[0]).length - 2).join("&#9472;");
			top = "&#9484;" + filler + "&#9488;\n";
			bottom = "&#9492;" + filler + "&#9496;";
			return top + columnsDestination.join("") + bottom;
		}
	}
}
Дело было вечером, делать было... на самом деле было чего
Код AS3:
private function testArray2D():void
{
	var array:Array2D = Array2D.make(4, 5);
	trace(Array2D.print(array));
	Array2D.setColumn(array, 2, [1, 2, 3]);
	trace(Array2D.print(array));
	Array2D.setRow(array, 2, [5, 6, 7]);
	trace(Array2D.print(array));
	Array2D.insertColumns(array, 3, 4, Math.max);
	trace(Array2D.print(array));
}
Код:
┌────────────────────────────────────────────┐
│ undefined, undefined, undefined, undefined │
│ undefined, undefined, undefined, undefined │
│ undefined, undefined, undefined, undefined │
│ undefined, undefined, undefined, undefined │
│ undefined, undefined, undefined, undefined │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ undefined, undefined, 1,         undefined │
│ undefined, undefined, 2,         undefined │
│ undefined, undefined, 3,         undefined │
│ undefined, undefined, undefined, undefined │
│ undefined, undefined, undefined, undefined │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ undefined, undefined, 1,         undefined │
│ undefined, undefined, 2,         undefined │
│ 5,         6,         7,         undefined │
│ undefined, undefined, undefined, undefined │
│ undefined, undefined, undefined, undefined │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────┐
│ undefined, undefined, 1,         NaN, NaN, NaN, NaN, undefined │
│ undefined, undefined, 2,         NaN, NaN, NaN, NaN, undefined │
│ 5,         6,         7,         NaN, NaN, NaN, NaN, undefined │
│ undefined, undefined, undefined, NaN, NaN, NaN, NaN, undefined │
│ undefined, undefined, undefined, NaN, NaN, NaN, NaN, undefined │
└────────────────────────────────────────────────────────────────┘
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 23.01.2012 в 04:10.
Создать новую тему   Часовой пояс GMT +4, время: 10:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
array

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

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


 


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


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