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

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

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

Регистрация: Oct 2005
Сообщений: 18
Отправить сообщение для PoMaH с помощью ICQ
По умолчанию Сортировка двумерного массива

Допустим мы имеем двумерный массив:
var array:Array = new Array(["Чижик", 2], ["Ёжик", 5], ["Айболит", 3], ["Винни-пух", 1], ["Пыжик ", 4]);

мне его нужно отсортировать по первому элементу. Это я могу осуществить с помощью array.sortOn(0); , но результат меня не устраивает: Я не хочу чтобы Ёжик был перым!

Как можно по нормальному отсортировать?
Просто array.sort(maySortOrder); не предлагать, нужно обязательно сортировать двумерный массив.

Старый 21.04.2006, 00:36
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
С помощью array.sort(maySortOrder); можно и двухмерный массив отсортировать.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.04.2006, 03:14
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
собственно сама функция сортировки
Код:
sortIO = function (a, b) {
	//// значение по умолчанию
	var r = 0;
	//// обычная функция проверки
	if (a > b) {
		r = 1;
	} else if (a < b) {
		r = -1;
	}
	//// если в словах было символ Ё и слова не равны...  
	if ((a.indexOf ("Ё") != -1 or a.indexOf ("ё") != -1 or b.indexOf ("Ё") != -1 or b.indexOf ("ё") != -1) and r != 0) {
		var a2 = a.split ("");
		var b2 = b.split ("");
		//// проверяем символы последовательно, до первого не совпадениея
		for (var i = 0; i < Math.min (a2.length, b2.length); i++) {
			//// если символы не равны...
			if (a2[i] != b2[i]) {
				var ac = a2[i].charCodeAt ();
				var bc = b2[i].charCodeAt ();
				//// проверка на положение Ё
				if ((ac == 1025 and bc > 1045) or (ac == 1105 and bc > 1077) or (ac < 1046 and bc == 1025) or (ac < 1078 and bc == 1105)) {
					r = -1;
				} else if ((ac == 1025 and bc < 1046) or (ac == 1105 and bc < 1078) or (ac > 1045 and bc == 1025) or (ac > 1077 and bc == 1105)) {
					r = 1;
				}
				//// дальше сравнивать не имеет смысла  
				break;
			}
		}
	}
	return r;
};
проверям
Код:
arrayT = ["ае- 7", "АЖ- 3", "АЁ- 2", "АЕ- 1", "ЁА- 5", "ЖА- 6", "ЕА- 4", "аж- 9", "ёа-11", "ёа-11", "еа-10", "жа-12", "аё- 8"];
arrayT.sort (sortIO);
for (var i = 0; i < arrayT.length; i++) {
	trace (arrayT[i]);
}
trace ("");
//// должно быть true
trace (String (arrayT) == "АЕ- 1,АЁ- 2,АЖ- 3,ЕА- 4,ЁА- 5,ЖА- 6,ае- 7,аё- 8,аж- 9,еа-10,ёа-11,ёа-11,жа-12");
trace ("");
проверям по поставленной задаче (расширил чтобы уж наверняка)
Код:
sort2D = function (a, b) {
	return sortIO (a[0], b[0]);
};
arrayA = new Array (["чижик", 2], ["ёжик", 5], ["айболит", 3], ["винни-пух", 1], ["пыжик ", 4],["Чижик", 2], ["Ёжик", 5], ["Айболит", 3], ["Винни-пух", 1], ["Пыжик ", 4]);
arrayA.sort (sort2D);
for (var i = 0; i < arrayA.length; i++) {
	trace (arrayA[i]);
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.04.2006, 06:39
PoMaH вне форума Посмотреть профиль Отправить личное сообщение для PoMaH Найти все сообщения от PoMaH
  № 4  
Ответить с цитированием
PoMaH

Регистрация: Oct 2005
Сообщений: 18
Отправить сообщение для PoMaH с помощью ICQ
ОГО! Что то не допер до этого. Классно, спасибо!

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

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

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


 


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


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