www.map-info.ru :: Просмотр темы - Удалении произвольного элемента в массиве
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
sunzh



Зарегистрирован: 13.05.2006
Сообщения: 19

СообщениеДобавлено: Пн Июл 31, 2017 3:55 pm    Заголовок сообщения: Удалении произвольного элемента в массиве Добавить ответ со ссылкой на данный текст

При удалении элемента из массива и уменьшения его размера выражением ReDim происходит потеря данных., как быть? Создавать сначала уменьшенную копию и перезаполнять с пропуском удаляемого элемента? Кто что думает?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Авг 01, 2017 5:43 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Согласно документации ReDim не гарантирует сохранение данных (только в случае расширения массива). Поэтому - да, перекидывать в другой массив. Второй вариант - не уменьшать массив, заполнять "удаляемые" элементы заведомо невозможным значением в рамках задачи, которое потом при обходах массива не учитывать (пропускать).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
sunzh



Зарегистрирован: 13.05.2006
Сообщения: 19

СообщениеДобавлено: Чт Авг 03, 2017 6:13 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Dim DropItemIndex, i, j,m As Integer ' DropItemIndex - Удаляемый элемент
Dim Copy(), Original () As string
i = UBound(Original)
j = i - 1
ReDim Copy (j)
k=1
m=1

Do While k <= i
If k = DropItemIndex Then
m = m - 1
Else
Copy(m).Name = Original(k)
End If
k = k + 1
m = m + 1
Loop
ReDim Original(j)
For k = 1 To j
Original(k) = Copy(k)
Next


3 дня искал (не тривиально оказалось)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sckameikin22



Зарегистрирован: 02.05.2018
Сообщения: 2
Откуда: Санкт-Петербург

СообщениеДобавлено: Ср Май 02, 2018 4:36 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Интересные ссылки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_Y



Зарегистрирован: 28.11.2008
Сообщения: 122

СообщениеДобавлено: Вт Май 15, 2018 3:38 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

sunzh писал(а):
Dim DropItemIndex, i, j,m As Integer ' DropItemIndex - Удаляемый элемент
Dim Copy(), Original () As string
i = UBound(Original)
j = i - 1
ReDim Copy (j)
k=1
m=1

Do While k <= i
If k = DropItemIndex Then
m = m - 1
Else
Copy(m).Name = Original(k)
End If
k = k + 1
m = m + 1
Loop
ReDim Original(j)
For k = 1 To j
Original(k) = Copy(k)
Next


3 дня искал (не тривиально оказалось)

Зачем такие сложности? Вам предложили отличный вариант, пишите в удаляемый элемент, например "NAN". Потом, при обходе, проверяйте на него и пропускайте. И память сэкономите, без всяких доп.массивов, и в скорости работы выграете, и размер кода раза в четыре меньше.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru