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

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

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

Регистрация: Apr 2009
Адрес: Санкт-Петербург
Сообщений: 18
По умолчанию Array.Sort - проблема с сортировкой русско-английского массива

Здравствуйте!
Подскажите, пожайлуста, метод Array.Sort действительно не может отсортировать массив, состоящий из русских и английских слов, перемешанных между собой?
Внизу привожу trace части массива.
И если Array.Sort этого сделать не во состоянии, какие могут быть варианты?

Код AS1/AS2:
32    massive   Subaru  type -          avto
33    massive   Toyota  type -          avto
34    massive   Jeep  type -          avto
35    massive   PUGEOUT  type -          avto
36    massive   PUGEOUT  type -          avto
37    massive   Лаура  type -          avto
38    massive   РРТ  type -          avto
39    massive   Пежо  type -          avto
 
 
 
32    sorted massive   undefined  type -          avto
33    sorted massive   undefined  type -          avto
34    sorted massive   undefined  type -          avto
35    sorted massive   undefined  type -          avto
36    sorted massive   undefined  type -          avto
37    sorted massive   Лаура  type -          avto
38    sorted massive   РРТ  type -          avto
39    sorted massive   Пежо  type -          avto
__________________
Чому ж я не птица? Чому ж не летаю?

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

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
Код AS1/AS2:
var arr = [ 'Fergie', 'Наташенька', 'Ленок', 'Angelina', 'Анюта',  'Adriana'];
trace(arr);
arr.sort();
trace(arr)

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

Регистрация: Apr 2009
Адрес: Санкт-Петербург
Сообщений: 18
Да, спасибо, я читала - но получается, это можно сделать, лишь перебив руками все названия? У меня XML большой, записей на 400. Такой вариант не годится. Причем, после сортировки названий по алфавиту, мне необходимо, чтобы другие массивы, состоящие из записей, соответствующих этим названиям, поменяли порядок в соответствии с сортировкой названий. Т.е. если была запись Jepp, Итальянская, 6, 333-33-33, то после сортировки всей базы по алфавиту, этот адрес и телефон по прежнему соответствовали этому названию.
Реально ли сделать подобное во флеше - или стоит писать программу, которая будет сортировать по названию сам XML?
__________________
Чому ж я не птица? Чому ж не летаю?

Старый 29.07.2009, 15:50
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Вы можете написать как выглядят исходные данные и что вы в итоге хотите получить?...
Мне не понятно откуда взялись undefined.
И PEUGEOT пишется с E
__________________
Hell is the possibility of sanity

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

Регистрация: Apr 2009
Адрес: Санкт-Петербург
Сообщений: 18
Итак, есть XML приблизительно такого вида:

Код:
<elux>
  <!-- таблица  object -->
    <object>
        <object_id>1</object_id>
        <object_type>shop</object_type>
        <object_name>Орхидея</object_name>
        <object_address>ул. Марата, 7</object_address>
        <object_tel>3335676</object_tel>
        <object_services>доставка цветов, составление букетов, оформление и декорация помещений</object_services>
        <object_url>http://www.orhideja.ru</object_url>
	<object_piс>logo/3.gif</object_piс>
        <object_map_id>1</object_map_id>
        <object_map_x>1000</object_map_x>
        <object_map_y>1000</object_map_y>
	<object_info>Сейчас нам предстоит самая сложная задача в этом проекте — реализовать функцию-мозг, которая будет решать, в какую клетку нужно сделать ход. Первым шагом, который мы осуществим в этом направлении, станет создание переменных, хранящих маршрут обхода рядков для каждой клетки. Как вы помните, необходимо сделать оценку ценности позиции клетки относительно всех рядков, к которым она относится, а вывод сделать по их сумме. Конечно, можно попытаться написать и универсальный алгоритм, который сможет обходить все рядки, к которым принадлежит клетка, вне зависимости от ее положения. Но это слишком сложно для крестиков-ноликов и достойно скорее игры «Пять в ряд». Гораздо проще и быстрее будет перечислить в индивидуальной для каждой клетки переменной индексы клеток, образующих рядки, к которым она относится:</object_info>
	<object_foto1>foto/1.jpg</object_foto1>
	<object_foto2>foto/2.jpg</object_foto2>
	<object_foto3>foto/3.jpg</object_foto3>
	<object_time>с 10 до 18-30</object_time>
    </object>
    <object>
        <object_id>2</object_id>
        <object_type>shop</object_type>
        <object_name>Модница</object_name>
        <object_address>ул. Науки, 5</object_address>
        <object_tel>2340900</object_tel>
        <object_services>сумки из Италии</object_services>
        <object_url>http://www.italy.ru</object_url>
	<object_piс>logo/3.gif</object_piс>
        <object_map_id>2</object_map_id>
        <object_map_x>390</object_map_x>
        <object_map_y>700</object_map_y>
	<object_info>Станции превратились в города-государства, а в туннелях властвуют тьма и страх. Жители Севастопольской, маленькой подземной Спарты, ценой невероятных 
усилий выживают на своей станции и обороняют ее. Но однажды Севастопольская оказывается отрезанной от большого метро, всем ее обитателям грозит страшная гибель. Чтобы спасти людей, нужен настоящий герой…
</object_info>
	<object_foto1>foto/4.jpg</object_foto1>
	<object_foto2>foto/5.jpg</object_foto2>
	<object_foto3>foto/6.jpg</object_foto3>
	<object_time>с 10 до 19</object_time>
    </object>
...
Есть кнопки с алфавитом - русским и английским(по 2-3 буквы на кнопку). При нажатии на кнопку на сцене отображаются все объекты, с названием, начинающимся на соответствующую букву. Проблема в том, что они отображаются в том порядке, в котором записаны в XML. Т.е. не происходит сортировки по алфавиту - простая выборка, и названия на Б оказываются раньше названий на А, если в XML они встречаются раньше.

Внизу привожу кусок кода, который отвечает за выборку. Сначала выборка по "типу". Если язык не выбран - подгружаются все объекты, если русский или английский - то по буквам.
Необходимо, чтобы на экране все было по алфавиту

Код AS1/AS2:
	for (var i = 0; i < elux.firstChild.childNodes.length; i++)
	{
 
		var i_name = new Array ();
		i_name[i] = o_name[i].split ("");
 
		if (o_type[i] == "avto")
		{
			if (ru_eng == "all")
			{
				otrisovka(o_name[i],o_address[i],o_tel[i],o_services[i],o_info[i],o_foto1[i],o_foto2[i],o_foto3[i],o_pic[i],o_time[i],o_url[i]);
			}
			else if (ru_eng == "rus")
			{
				if ((i_name[i][0] == t1) or (i_name[i][0] == t2) or (i_name[i][0] == t3))
				{
					trace (o_name[i]);
					otrisovka(o_name[i],o_address[i],o_tel[i],o_services[i],o_info[i],o_foto1[i],o_foto2[i],o_foto3[i],o_pic[i],o_time[i],o_url[i]);
				}
				else
				{
					//trace("NO   " + i_name[i][0]);
				}
			}
			else if (ru_eng = "eng")
			{
				if ((i_name[i][0] == r1) or (i_name[i][0] == r2))
				{
					trace (o_name[i]);
					otrisovka(o_name[i],o_address[i],o_tel[i],o_services[i],o_info[i],o_foto1[i],o_foto2[i],o_foto3[i],o_pic[i],o_time[i],o_url[i]);
				}
				else
				{
				}
			}
			else
			{
			}
		}
		else
		{
		}
	}

Эм... Хорошо, что вы не видите, что я там, бывает, в инфо пишу... Базы как таковой еще нет, а искать реальную информацию лениво

Добавлено через 4 минуты
Если не знаешь, как делать в принципе - читаешь литературу, копаешься на форумах - и узнаешь. Учиться, бывает, интересно...
__________________
Чому ж я не птица? Чому ж не летаю?

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

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
реально:
Код AS1/AS2:
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function(flag:Boolean){
	if(!flag){ trace('no such file'); return; }
	convert();
	// поле по которому сортируем
	sorting('object_name', false);
}
xml.load('your.xml');
 
var data = new Array();
function convert(){
	var box= xml.firstChild.firstChild;
	while(box){
		var item:Object = new Object();
		var prop = box.firstChild;
		while(prop){
			item[prop.nodeName] = prop.firstChild.nodeValue;
			prop = prop.nextSibling;
		}
		data.push(item);
		box = box.nextSibling;
	}
}
 
function sorting(field:String, desc:Boolean){
	test_trace()
	if(desc)
		data.sortOn([field], Array.DESCENDING );
	else
		data.sortOn([field]);
	test_trace()
}
 
// тустовый вывод
function test_trace(){
	trace( data[0].object_id+ '| ' +data[0].object_name);
	trace( data[1].object_id+ '| ' +data[1].object_name);
	trace( '--------');
}
но лучше, конечно, большие данные подготвливать в другой среде


Последний раз редактировалось Mnilionic; 30.07.2009 в 21:25.
Создать новую тему Ответ Часовой пояс GMT +4, время: 02:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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