Вопрос про wxListBox::GetSelections

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
gtafan
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 201
Joined: Wed Mar 29, 2017 9:52 am

Вопрос про wxListBox::GetSelections

Post by gtafan »

В документации написано, что wxListBox::GetSelections записывает в массив типа wxArrayInt индексы всех выбранных элементов, но к сожалению ничего не сказано о порядке в котором эти индексы записаны там. Скажем у меня имеется wxListBox с 20 элементами и я в ней выбрал элементы 2, 5, 7 и 15, будет всегда массив выглядеть {2, 5, 7, 15} или возможны другие комбинации как например {7, 5, 15, 2}?
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: Вопрос про wxListBox::GetSelections

Post by T-Rex »

Если в документации не сказано, значит рассчитывать на то, что массив будет отсортирован, не стоит. Все равно на бекенде используется нативная реализация под каждую ОС (кстати, если есть желание, можно просто в исходники посмотреть, и убедиться, есть там сортировка или нет), и нет никакой гарантии, что нативный вызов в какой-то конкретной ОС возвращает сортированное значение.

Вон в wxArrayInt есть Sort() и можно просто результат отсортировать, если прям так сильно нужно.
А что реализовать нужно-то? Пока не могу навскидку придумать хороший юзкейс, для которого нужен был бы именно отсортированный массив индексов.
gtafan
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 201
Joined: Wed Mar 29, 2017 9:52 am

Re: Вопрос про wxListBox::GetSelections

Post by gtafan »

T-Rex wrote:Если в документации не сказано, значит рассчитывать на то, что массив будет отсортирован, не стоит. Все равно на бекенде используется нативная реализация под каждую ОС (кстати, если есть желание, можно просто в исходники посмотреть, и убедиться, есть там сортировка или нет), и нет никакой гарантии, что нативный вызов в какой-то конкретной ОС возвращает сортированное значение.

Вон в wxArrayInt есть Sort() и можно просто результат отсортировать, если прям так сильно нужно.
А что реализовать нужно-то? Пока не могу навскидку придумать хороший юзкейс, для которого нужен был бы именно отсортированный массив индексов.
Все выбранные элементы должны быть удалены, и удаление начинается в обратном порядке с самого большого индекса. Если взять мой пример верху, то сперва удаляется элемент с индексом 15, потом 7, потом 5 и под конец 2.
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: Вопрос про wxListBox::GetSelections

Post by ONEEYEMAN »

Dobrogo vremeni sutok,
Esli ja pravilno pomnju, est class wxSortedArray.

Ne probovali im vospolzovatsja?
gtafan
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 201
Joined: Wed Mar 29, 2017 9:52 am

Re: Вопрос про wxListBox::GetSelections

Post by gtafan »

ONEEYEMAN wrote:Dobrogo vremeni sutok,
Esli ja pravilno pomnju, est class wxSortedArray.

Ne probovali im vospolzovatsja?
Спасибо за информацию, но я решил воспользоваться другим решением: проверяю начиная с конца все элементы на selected и при положительном ответе удаляю элемент. Думаю, что всё таки моё решение более быстрое, чем сортировка массива.
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: Вопрос про wxListBox::GetSelections

Post by ONEEYEMAN »

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...
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: Вопрос про wxListBox::GetSelections

Post by T-Rex »

gtafan wrote:Думаю, что всё таки моё решение более быстрое, чем сортировка массива.
Не факт. Если 10M элементов в списке, а 5 выбрано, то если проходить по всем элементам с конца списка, будет работать дольше, чем отсортировать массив из 5ти элементов. Даже на сотне элементов вариант с сортировкой будет быстрее. Но, в общем, ваш софт - вам решать.
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: Вопрос про wxListBox::GetSelections

Post by ONEEYEMAN »

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.
Post Reply