Страница: 1 |
Страница: 1 |
Вопрос: Сортировка массива без учета регистра
Добавлено: 07.03.05 14:06
Автор вопроса: ZagZag | ICQ: 295002202
На ПБ есть замечательная ф-ция
ARRAY SORT имя_массива
Так вот, есть ли какой-нибудь флаг (Типа VB6 Option Compare Text) чтобы
массив строк сортировался без учета регистра?
Пример с учетом регистра:
до: A,b,B,a
после: A,B,a,b
Но мне нужно:
после: A,a,B,b
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 07.03.05 15:13
Там есть опция:
[,COLLATE {UCASE | cstring}]
Почитай хелп по Array Sort.
Номер ответа: 2
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #2
Добавлено: 08.03.05 09:00
Вот только с кириллицей регистронезависимого не получится.
Номер ответа: 3
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #3
Добавлено: 08.03.05 16:08
IMO, он с кирилицей вообще не дружит. Только что отоброзить может.
Номер ответа: 4
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #4
Добавлено: 08.03.05 16:45
А если преобразовать кирилицу в Unicode оператором UCODE$ ?
)
Номер ответа: 5
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #5
Добавлено: 08.03.05 16:56
С юникодом работать неудобно, а вообще - попробуй.
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 08.03.05 20:36
UCODE$ применить к массиву?
Ну тогда проще самому (да и лучше, со всех сторон) сортировку сделать
Номер ответа: 7
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #7
Добавлено: 09.03.05 00:40
А вот и нет
Получилась регистронезависимая сортировка для кирилицы. Хелпы надо просто читать.
#Compile Exe
Function PbMain
Dim MyPhraseA As String
MyPhraseA="Ну это что то типа русского текста."
Dim SortedA(Len(MyPhraseA)-1) As String*1 At StrPtr(MyPhraseA)
Dim SortTemplate As String, X As Byte
For x = 0 To 223
SortTemplate = SortTemplate + Chr$(x)
Next x
For x = 192 To 223
SortTemplate = SortTemplate + Chr$(x)
Next x
Array Sort SortedA(), Collate SortTemplate
MsgBox MyPhraseA
End Function
Номер ответа: 8
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #8
Добавлено: 09.03.05 01:08
А, ну если свою табличку создать, то конечно, я имею ввиду, встроенная таблица не позволяет, с ней регистронезависимые получаются только латинские, а кириллица сортируется, но регистр имеет значение, т.е. получается, если есть массив с лат и рус словами, половина будет отсортирована регистронезависимо, половина - регистрозависимо.
А таблиц столько, что и не знаешь какую выбрать, то получаются кириллица сначала, то наоборот, латинские, то цифры, то знаки.
Номер ответа: 9
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #9
Добавлено: 09.03.05 01:23
Чё? Нефига не понял
Когда нужно регистрозависимую делай
Array Sort SortedA()
а когда независимую то
Array Sort SortedA(), Collate SortTemplate
Не знаю правда как это скажется на скорости, но думаю всё же быстрее чем самому изобретать велосипед.
Номер ответа: 10
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #10
Добавлено: 09.03.05 02:30
Прекрасно я всё понял, тем более что совсем недавно делал сортировку массивов на асме, тоже регистронезависимую. И для сравнения брал pb-шный array sort. Кстати автору вопроса посылал исходник, но он чёто видимо не смог вычленить из кода саму сортировку, поэтому и запостил этот вопрос.
А на скорости это естественно скажется, и естественно в сторону ухудшения, т.к. нужно время на сопоставление каждому байту строки байта из таблицы.
Номер ответа: 11
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #11
Добавлено: 09.03.05 03:26
Это я нефига не понял из эпоса под номером 8. В смысле не понял что тебя не устраивает.
Вроде всё работает как надо. Скорость наверное всё же будет медленей, но опять же нужно смотреть сам алгоритм или если лень - засечь время.