Точка doInsert не срабатывает при изначально пустом списке строк. Аналогичная точка в таблице StringTableMT, например, позволяет вставить данные независимо от того пустая она или нет.
code_14940.txt
Точка doInsert понадобилась для обратной сортировки упорядоченнного списка строк, т.к. при использовании другого способа быстродействие на порядок ниже
code_14941.txt
Этот топик читают: Гость
Ответов: 485
Рейтинг: 86
|
|||
карма: 0 |
| ||
файлы: 2 | code_14940.txt [1.7KB] [104], code_14941.txt [2.8KB] [92] |
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Тут проблема вот в этой защите
Но вполне было достаточно и вот такой
filyaxxxcom писал(а): Точка doInsert понадобилась для обратной сортировки упорядоченнного списка строкА вот так сделать нельзя было Быстродействие еще выше, чем с doInsert
|
|||
карма: 22 |
| ||
Голосовали: | filyaxxxcom |
Ответов: 485
Рейтинг: 86
|
|||
nesco писал(а): Но вполне было достаточно и вот такой |
|||
карма: 0 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
filyaxxxcom писал(а): НедостаточноДа, действительно, наблюдается фигня с вылетанием при индексах отличных от нуля ------------ Дoбавленo в 22.41: Короче, надо делать так, тогда будет добавляться нормально
Insert при ind=FList.Count эквиваленто Add |
|||
карма: 22 |
|
Ответов: 485
Рейтинг: 86
|
|||
или так?
if (ind <> 0) and ((ind < 0) or (ind > FList.Count - 1)) then exit;
тогда при ind=FList.Count не будет добавлять |
|||
карма: 0 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
filyaxxxcom писал(а): ind=FList.CountНу я же написал, что это эквивалетно Add. Ты проверил условие, которое я привел, чем оно не устраивает, или выдает ошибку |
|||
карма: 22 |
|
Ответов: 485
Рейтинг: 86
|
|||
nesco писал(а): Ты проверил условие, которое я привел, чем оно не устраивает, или выдает ошибку Такая (или подобная) правка if (ind <> 0) and ((ind < 0) or (ind > FList.Count - 1)) then exit; делает исключение только для пустого списка при индексе = 0.
А такая if (ind < 0) or (ind > FList.Count) then exit; и для пустого списка, и для заполненого.
А это может повлечь проблемы совместимости и(или) будет вызывать вопросы почему при несуществующем индексе строка то не вставляется, то вставляется (при ind=FList.Count) |
|||
карма: 0 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Подождем ответа начальника транспортного цеха
|
|||
карма: 22 |
|
Ответов: 485
Рейтинг: 86
|
|||
nesco писал(а): Подождем ответа начальника транспортного цехаfilyaxxxcom писал(а): И попутно выяснилось, что таблица тоже вываливается в Runtime Error, если индекс больше количества строк. А с этим как? |
|||
карма: 0 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
filyaxxxcom писал(а): А с этим как?Исправлено |
|||
карма: 22 |
| ||
Голосовали: | filyaxxxcom |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
filyaxxxcom писал(а): При несуществующем индексе строка ИМХО вставляться не должна (как и сделано в оригинальном коде).должна. В идеале строка вставляется в начало списка всегда при index < 0 и в конец списка всегда при index>= count в vcl же сделано следующим образом: - при index < -1 или index > count выкидывает ошибку - при index = -1 или index = count метод работает аналогично add выбирать надо один из этих вариантов, а не нечто промежуточное |
|||
карма: 27 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Dilma писал(а): выбирать надо один из этих вариантов, а не нечто промежуточноеДля нас больше подходит последний, но в KOL'e -1, вроде, не поддерживается в качестве активного индекса |
|||
карма: 22 |
|
12