Page 1 of 1

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

Posted: Fri Apr 21, 2017 10:12 am
by gtafan
В документации написано, что wxListBox::GetSelections записывает в массив типа wxArrayInt индексы всех выбранных элементов, но к сожалению ничего не сказано о порядке в котором эти индексы записаны там. Скажем у меня имеется wxListBox с 20 элементами и я в ней выбрал элементы 2, 5, 7 и 15, будет всегда массив выглядеть {2, 5, 7, 15} или возможны другие комбинации как например {7, 5, 15, 2}?

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

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

Вон в wxArrayInt есть Sort() и можно просто результат отсортировать, если прям так сильно нужно.
А что реализовать нужно-то? Пока не могу навскидку придумать хороший юзкейс, для которого нужен был бы именно отсортированный массив индексов.

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

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

Вон в wxArrayInt есть Sort() и можно просто результат отсортировать, если прям так сильно нужно.
А что реализовать нужно-то? Пока не могу навскидку придумать хороший юзкейс, для которого нужен был бы именно отсортированный массив индексов.
Все выбранные элементы должны быть удалены, и удаление начинается в обратном порядке с самого большого индекса. Если взять мой пример верху, то сперва удаляется элемент с индексом 15, потом 7, потом 5 и под конец 2.

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

Posted: Fri Apr 21, 2017 1:50 pm
by ONEEYEMAN
Dobrogo vremeni sutok,
Esli ja pravilno pomnju, est class wxSortedArray.

Ne probovali im vospolzovatsja?

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

Posted: Tue Apr 25, 2017 2:33 pm
by gtafan
ONEEYEMAN wrote:Dobrogo vremeni sutok,
Esli ja pravilno pomnju, est class wxSortedArray.

Ne probovali im vospolzovatsja?
Спасибо за информацию, но я решил воспользоваться другим решением: проверяю начиная с конца все элементы на selected и при положительном ответе удаляю элемент. Думаю, что всё таки моё решение более быстрое, чем сортировка массива.

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

Posted: Tue Apr 25, 2017 2:41 pm
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...

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

Posted: Wed Apr 26, 2017 7:57 am
by T-Rex
gtafan wrote:Думаю, что всё таки моё решение более быстрое, чем сортировка массива.
Не факт. Если 10M элементов в списке, а 5 выбрано, то если проходить по всем элементам с конца списка, будет работать дольше, чем отсортировать массив из 5ти элементов. Даже на сотне элементов вариант с сортировкой будет быстрее. Но, в общем, ваш софт - вам решать.

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

Posted: Wed Apr 26, 2017 1:22 pm
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.