Страница: 1 |
Страница: 1 |
Вопрос: сортировка переменных типа Variant
Добавлено: 03.04.09 13:01
Автор вопроса: ilang-ilang | ICQ: 355115304
подскажите плиз:
имеется ListBox в котором содержится список (1458, 4789, 1458А, 1478Б и т.д.). как отсортировать элементы списка. обычные алгритмы сортировки просто расбрасывают элементы по списку...
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #1
Добавлено: 03.04.09 13:53
Используй не массив вариант, а массив строк. Если без Variant не обойтись - явно преобразуй элементы массива в строки. А вообще-то, у ListBox есть встроенная возможность сортировки данных.
Номер ответа: 2
Автор ответа:
ilang-ilang
ICQ: 355115304
Вопросов: 5
Ответов: 16
Профиль | | #2
Добавлено: 06.04.09 10:14
а как ее подключить? я читала про нее, но наверное у меня старый вба((, свойства sorted у listbox'а нету((
Номер ответа: 3
Автор ответа:
ilang-ilang
ICQ: 355115304
Вопросов: 5
Ответов: 16
Профиль | | #3
Добавлено: 06.04.09 11:53
все дело в том, что когда вба сравнивает строки для него значение 5 больше 10, т.е. числа в строке он сравнивает правильно, если они имеют одинаковое кол-во цифр: 005 < 010 и т.д... поэтому у меня после сортировки выдавало, что 58 > 1237... по-другому видимо нельзя, даже если подключить Sorted
Номер ответа: 4
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #4
Добавлено: 06.04.09 15:35
Ну если у тебя в ListBox хранятся строковые представления чисел (а не строки, содержащие символи и числа), то все их можно отформатировать List1(i) = Format(CLng(List1(i),"000000" и тогда числа все будут шестизначные (к примеру): 000005 и 000010 и сравниваться уже будут правильно.
Номер ответа: 5
Автор ответа:
ilang-ilang
ICQ: 355115304
Вопросов: 5
Ответов: 16
Профиль | | #5
Добавлено: 07.04.09 11:19
Type mismatch ((
вот именно, что у меня как раз-таки строки, содержащие символы и числа, правда с символами редко, но все же встречаются, т.е. 5, 57, 4589, 1456, 1456А, 147, 1256Б и т.д., причем таких значений может быть больше шестисот и сортировка вручную ужасно замедляет работу...(
Номер ответа: 6
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #6
Добавлено: 07.04.09 12:03
Ну это.. там типа номеров групп что-ли? Если посчитать число знаков в каждой строке, а затем в начало каждой строки добавить пробелов столько, чтобы выровнять длину строк, а потом отсортировать содержимое строкового массива скажем обычным пузырьковым алгоритмом? Далее загрузить все это в ListBox.
Номер ответа: 7
Автор ответа:
ilang-ilang
ICQ: 355115304
Вопросов: 5
Ответов: 16
Профиль | | #7
Добавлено: 07.04.09 12:45
спасибо огромное конечно за предложенные варианты! просто дело в том, что когда элементов более тысячи (это не группы, а номера шкафов уличного освещения(но это не имеет значения)), а иногда и более двух тысяч, то это уж очень медленно - сначала в массив, потом выравнивание строк, потом метод пузырька... тем более что далее проводятся с этим списком преобразования, которые добавляют элементы из другого списка, которые тоже нужно поместить на свои места, а не просто в конец списка и опять придется проделывать сравнение и т.д... бр-р-р..
Номер ответа: 8
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #8
Добавлено: 07.04.09 15:52
Да не стоит так бояться величины списка, не вам вручную делать, а компьютеру. Выравнивание строк - для более красивой сортировки, не хотите-не надо. Используйте ListView, он-то точно умеет сортировать элементы, очень удобно потом сочетать в нем и другие данные в табличном виде. Кстати, а где хранятся сами данные? Может их удобно будет разок отсортировать в источнике данных и потом повторять сортировку только по мере добавления новых элементов?
Номер ответа: 9
Автор ответа:
ilang-ilang
ICQ: 355115304
Вопросов: 5
Ответов: 16
Профиль | | #9
Добавлено: 08.04.09 11:59
впринципе неплохая идея с сортировкой в самом источнике, нужно будет попробовать. спасибо)