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

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

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

Регистрация: Sep 2006
Сообщений: 145
По умолчанию Сортировка украинских символов

Сама проблема достаточно банальна

Код AS3:
var ar:Array=new Array("А","Б","В","Ї","І","М","Є");
trace (ar);
trace (ar.sort()); //выдает Є,І,Ї,А,Б,В,М
есть ли готовые решения данной проблемы?

Старый 31.01.2012, 19:06
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
собственно с подобными темами врядли кто сталкивался, поэтому могу предложить тока вариант альфа

var ar:Array = [ [1,"A"] , [7,"X"] ] а потом сортировать по первому признаку, или воспользоваться хешами например
__________________
Марк Tween

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Насколько я понимаю Flash не имеет поддержки украинской локали :
Цитата:
Чешский cs
Датский da
Голландский nl
Английский en
Финский fi
Французский fr
Немецкий de
Венгерский hu
Итальянский it
Японский ja
Корейский ko
Норвежский no
Другой/неизвестен xu
Польский pl
Португальский pt
Русский ru
Китайский (упрощенный) zh-CN
Испанский es
Шведский sv
Китайский (традиционный) zh-TW
Турецкий tr
Соответственно он и не знает алфавитный порядок, предложение только одно по charCodе'ам проверять самому, и создать массив соответствия.
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от Genzo Посмотреть сообщение
Насколько я понимаю Flash не имеет поддержки украинской локали :
Локаль тут не причем.
Цитата:
Array.sort () - Сортирует элементы в массиве. Этот метод применяется для сортировки по значениям Юникода.
Та же Ё в русском будет впереди А.
Если речь идет только о сортировке букв, а не слов, то нужно написать свою функцию сортировки с учетом дополнительных кодов и вставить ее аргументом в sort (compareUkrFunction)

Добавлено через 34 минуты
Вроде так
Код AS3:
var ar:Array = new Array('А', 'а', 'Б', 'б', 'В', 'в', 'Г', 'г', 'Ґ', 'ґ', 'Д', 'д', 'Е', 'е', 'Є', 'є', 'Ж', 'ж', 'З', 'з', 'И', 'и', 'І', 'і', 'Ї', 'ї', 'Й', 'й', 'К', 'к', 'Л', 'л', 'М', 'м', 'Н', 'н', 'О', 'о', 'П', 'п', 'Р', 'р', 'С', 'с', 'Т', 'т', 'У', 'у', 'Ф', 'ф', 'Х', 'х', 'Ц', 'ц', 'Ч', 'ч', 'Ш', 'ш', 'Щ', 'щ', 'Ь', 'ь', 'Ю', 'ю', 'Я', 'я');
trace (ar.join (''));
trace ('АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯабвгґдеєжзиіїйклмнопрстуфхцчшщьюя');
trace (ar.sort(compareUkr).join (''));
trace (ar.sort(compareUkr).join ('') == 'АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯабвгґдеєжзиіїйклмнопрстуфхцчшщьюя');
trace (ar.sort().join (''));
 
function compareUkr (a:String, b:String):Number {
	var aCode:Number = a.charCodeAt (0);
	var bCode:Number = b.charCodeAt (0);
	switch (aCode) {
		case 1168://{ /
			aCode = 1043.5
			break;
		//}
		case 1169://{ /
			aCode = 1075.5
			break;
		//}
		case 1028://{ /
			aCode = 1045.5
			break;
		//}
		case 1108://{ /
			aCode = 1077.5
			break;
		//}
		case 1030://{ /
			aCode = 1048.5
			break;
		//}
		case 1110://{ /
			aCode = 1080.5
			break;
		//}
		case 1031://{ /
			aCode = 1048.6
			break;
		//}
		case 1111://{ /
			aCode = 1080.6
			break;
		//}
		default :
	}
	switch (bCode) {
		case 1168://{ /
			bCode = 1043.5
			break;
		//}
		case 1169://{ /
			bCode = 1075.5
			break;
		//}
		case 1028://{ /
			bCode = 1045.5
			break;
		//}
		case 1108://{ /
			bCode = 1077.5
			break;
		//}
		case 1030://{ /
			bCode = 1048.5
			break;
		//}
		case 1110://{ /
			bCode = 1080.5
			break;
		//}
		case 1031://{ /
			bCode = 1048.6
			break;
		//}
		case 1111://{ /
			bCode = 1080.6
			break;
		//}
		default :
	}
	if(aCode > bCode) {
		return 1;
	} else if(aCode < bCode) {
		return -1;
	} else  {
		return 0;
	}
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 31.01.2012 в 19:22.
Старый 01.02.2012, 00:39
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 5  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Сообщение от XoJlToH Посмотреть сообщение
есть ли готовые решения данной проблемы?
Стандартное средство - Collator. У него компаратор есть, который в сортировку можно передать. А вот поддерживает он украинский или нет - смотрите сами.

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

Регистрация: Sep 2006
Сообщений: 145
Спасибо за интересный инструмент, украинский вроде поддерживается
И вроде результат такой, как нужно, жаль в sortOn его передать нельзя

Код AS3:
import flash.globalization.Collator;
import flash.globalization.CollatorMode;
import flash.globalization.LocaleID;
 
var col:Collator;
var ar:Array=new Array("АР Крим","Херсонська","Харківська","Івано-Франківська","Хмельницка","Київ","Україна","Вінницька","Волинська");
var str1:String = "А";
var str2:String = "Б";
 
col = new Collator("uk-UA",CollatorMode.SORTING);
trace(ar.sort(col.compare)); //АР Крим,Вінницька,Волинська,Івано-Франківська,Київ,Україна,Харківська,Херсонська,Хмельницка


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

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

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


 


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


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