Вопрос про wxListBox::GetSelections
Вопрос про wxListBox::GetSelections
В документации написано, что wxListBox::GetSelections записывает в массив типа wxArrayInt индексы всех выбранных элементов, но к сожалению ничего не сказано о порядке в котором эти индексы записаны там. Скажем у меня имеется wxListBox с 20 элементами и я в ней выбрал элементы 2, 5, 7 и 15, будет всегда массив выглядеть {2, 5, 7, 15} или возможны другие комбинации как например {7, 5, 15, 2}?
- T-Rex
- Moderator
- Posts: 1249
- Joined: Sat Oct 23, 2004 9:58 am
- Location: Zaporizhzhya, Ukraine
- Contact:
Re: Вопрос про wxListBox::GetSelections
Если в документации не сказано, значит рассчитывать на то, что массив будет отсортирован, не стоит. Все равно на бекенде используется нативная реализация под каждую ОС (кстати, если есть желание, можно просто в исходники посмотреть, и убедиться, есть там сортировка или нет), и нет никакой гарантии, что нативный вызов в какой-то конкретной ОС возвращает сортированное значение.
Вон в wxArrayInt есть Sort() и можно просто результат отсортировать, если прям так сильно нужно.
А что реализовать нужно-то? Пока не могу навскидку придумать хороший юзкейс, для которого нужен был бы именно отсортированный массив индексов.
Вон в wxArrayInt есть Sort() и можно просто результат отсортировать, если прям так сильно нужно.
А что реализовать нужно-то? Пока не могу навскидку придумать хороший юзкейс, для которого нужен был бы именно отсортированный массив индексов.
Re: Вопрос про wxListBox::GetSelections
Все выбранные элементы должны быть удалены, и удаление начинается в обратном порядке с самого большого индекса. Если взять мой пример верху, то сперва удаляется элемент с индексом 15, потом 7, потом 5 и под конец 2.T-Rex wrote:Если в документации не сказано, значит рассчитывать на то, что массив будет отсортирован, не стоит. Все равно на бекенде используется нативная реализация под каждую ОС (кстати, если есть желание, можно просто в исходники посмотреть, и убедиться, есть там сортировка или нет), и нет никакой гарантии, что нативный вызов в какой-то конкретной ОС возвращает сортированное значение.
Вон в wxArrayInt есть Sort() и можно просто результат отсортировать, если прям так сильно нужно.
А что реализовать нужно-то? Пока не могу навскидку придумать хороший юзкейс, для которого нужен был бы именно отсортированный массив индексов.
Re: Вопрос про wxListBox::GetSelections
Dobrogo vremeni sutok,
Esli ja pravilno pomnju, est class wxSortedArray.
Ne probovali im vospolzovatsja?
Esli ja pravilno pomnju, est class wxSortedArray.
Ne probovali im vospolzovatsja?
Re: Вопрос про wxListBox::GetSelections
Спасибо за информацию, но я решил воспользоваться другим решением: проверяю начиная с конца все элементы на selected и при положительном ответе удаляю элемент. Думаю, что всё таки моё решение более быстрое, чем сортировка массива.ONEEYEMAN wrote:Dobrogo vremeni sutok,
Esli ja pravilno pomnju, est class wxSortedArray.
Ne probovali im vospolzovatsja?
Re: Вопрос про wxListBox::GetSelections
Kak napisal T-Rex, net garantee chto massiv budet otsortirovan.
Esli est chetkoe trebovanie udaljat nachinaja s poslednego elementa, luchshe vypolnit sortirovku, osobenno uchityvaja to chto std::sort dovolno bystryj...
Esli est chetkoe trebovanie udaljat nachinaja s poslednego elementa, luchshe vypolnit sortirovku, osobenno uchityvaja to chto std::sort dovolno bystryj...
- T-Rex
- Moderator
- Posts: 1249
- Joined: Sat Oct 23, 2004 9:58 am
- Location: Zaporizhzhya, Ukraine
- Contact:
Re: Вопрос про wxListBox::GetSelections
Не факт. Если 10M элементов в списке, а 5 выбрано, то если проходить по всем элементам с конца списка, будет работать дольше, чем отсортировать массив из 5ти элементов. Даже на сотне элементов вариант с сортировкой будет быстрее. Но, в общем, ваш софт - вам решать.gtafan wrote:Думаю, что всё таки моё решение более быстрое, чем сортировка массива.
Re: Вопрос про wxListBox::GetSelections
Ili mogno esche prosche - kogda element v wxListBox vybran otmetit ego i zanesti v vektor.
Potom projti po etomu vektoru u poudaljat vse elemnty kotorye v etom vektore zapisany.
Potom projti po etomu vektoru u poudaljat vse elemnty kotorye v etom vektore zapisany.