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

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

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

Postby gtafan » Fri Apr 21, 2017 10:12 am

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

User avatar
T-Rex
Moderator
Moderator
Posts: 1121
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

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

Postby T-Rex » Fri Apr 21, 2017 10:38 am

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

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

gtafan
Knows some wx things
Knows some wx things
Posts: 27
Joined: Wed Mar 29, 2017 9:52 am

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

Postby gtafan » Fri Apr 21, 2017 11:30 am

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

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

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

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 1632
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

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

Postby ONEEYEMAN » Fri Apr 21, 2017 1:50 pm

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

Ne probovali im vospolzovatsja?

gtafan
Knows some wx things
Knows some wx things
Posts: 27
Joined: Wed Mar 29, 2017 9:52 am

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

Postby gtafan » Tue Apr 25, 2017 2:33 pm

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: 1632
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

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

Postby ONEEYEMAN » Tue Apr 25, 2017 2:41 pm

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


Return to “wxWidgets Development (Russian)”

Who is online

Users browsing this forum: No registered users and 1 guest