Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Удаление из массива Добавлено: 24.11.02 22:20  

Автор вопроса:  CyRax  | Web-сайт: basicproduction.nm.ru | ICQ: 204447456 

Есть массив строчных переменных.

Как удалить элемент в середине массива ?

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 Sergey M.



Вопросов: 9
Ответов: 68
 Профиль | | #1 Добавлено: 25.11.02 03:02
Если он не большой, его видимо нужно переписать используя Redim...

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 25.11.02 03:57
Redim обнуляет масив

Ответить

Номер ответа: 3
Автор ответа:
 Sergey M.



Вопросов: 9
Ответов: 68
 Профиль | | #3 Добавлено: 25.11.02 04:19

нет басика попробовать, но ваще должно быть так:

Dim a()                              ' Объявление динамического массива

ReDim a(10,10)                 ' Выделение памяти для массива 10х10

ReDim Preserve a(10,15)   ' Делает массив больше, но сохраняет содержимое.

Ответить

Номер ответа: 4
Автор ответа:
 DimaS



Вопросов: 2
Ответов: 85
 Профиль | | #4 Добавлено: 25.11.02 08:46

Может я ошибаюсь, но вопрос был об удалении произвольного элемента из массива, а не переопределении его размера. На этот случай существует большое кол-во алгоритмов попробуй посмотреть в спец литературе, в FAQ. Но смысл примерно такой:

Dim A(100,100) As String

' DelElement - номер удаляемого элемента в массиве

For i=DelElement To Ubound(A)

   A(i)=A(i+1)

Next i

т.е. перезаписываем удаляемый элемент массива, следующим значением и сдвигаем все последующие элементы массива к началу.

 

Удачи.

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 27.11.02 20:09

Спасибо уже нашёл.

Sergey M прав. Нужно добавить Preserve

Ответить

Номер ответа: 6
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #6
Добавлено: 28.11.02 11:32
И как, это интересно Redim удаляет элемент из середины массива?

Ответить

Номер ответа: 7
Автор ответа:
 Sergey M.



Вопросов: 9
Ответов: 68
 Профиль | | #7 Добавлено: 28.11.02 12:00

А кто сказал, что он удаляет?

Ответить

Номер ответа: 8
Автор ответа:
 DimaS



Вопросов: 2
Ответов: 85
 Профиль | | #8 Добавлено: 28.11.02 13:07

Автор вопроса CyRax

Есть массив строчных переменных

Как УДАЛИТЬ элемент в середине массива ?

Ответить

Номер ответа: 9
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 28.11.02 22:51

Да то про Redim было. А так...

Я переписывал в цикле.

Например A(x)=A(x+1). А потом A(xMax) удаляешь.

Нужно было переопределить массив.

А насчёт вопроса. Я тогда ещё Preserve не нашёл.

Вот такая блин хронология.

Ответить

Номер ответа: 10
Автор ответа:
 Sergey M.



Вопросов: 9
Ответов: 68
 Профиль | | #10 Добавлено: 29.11.02 04:36

Я рад, что у тебя всё получилось!

Ответить

Номер ответа: 11
Автор ответа:
 Иван



Администратор

ICQ: 147688925 

Вопросов: 24
Ответов: 708
 Web-сайт: www.vbnet.ru
 Профиль | | #11
Добавлено: 30.11.02 18:52
Господа! А не легче ли использовать вместо массива в этом случае коллекцию? Это, конечно, тормознее, но удобнее!

Ответить

Номер ответа: 12
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #12
Добавлено: 30.11.02 22:34

Спасибо господин администратор. Прикольная идея.
Если можно, то про тормознутость подробнее.

P.S. Я там послал Павлу вторую версию Хелпмейкера.
"ПСП" называется. Было бы неплохо поместить её на сайте
до того, как выйдет третья версия.
Про пример извлечения рисунков из DOC'ов я уже не
заикаюсь - не судьба видно. Ладно, отошлю на
АзбукуВБ.

Ответить

Номер ответа: 13
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #13
Добавлено: 02.12.02 07:11
Насколько я понимаю массив имеет сквозную нумерацию и в нем не может быть так, что после элемента 9 идет сразу 11, а в коллекции запросто. А проверять на существование элемента с данным индексом, вот это действительно тормоз. А потом, коллекция эффективна когда работаешь с массивом обектов по их именам. А в случае индексов лучше использовать классический массив. Особенно, если он многомерный.

Ответить

Номер ответа: 14
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #14
Добавлено: 03.12.02 19:54

Вот гляди что я состряпал.
Нормально он работает с индексами. Может где здесь тормоз ?

'Модуль класса (Class1)
Public InstanceName As String

'Модуль формы
Private MyClasses As New Collection
Private Sub Form_Load()
Dim TheName, MyObject, NameList
For z = 0 To 10
Dim Inst As New Class1
Inst.InstanceName = "Item-" & z
MyClasses.Add Item:=Inst, Key:=CStr(z)
Set Inst = Nothing
Next z
MsgBox MyClasses.Item(1).InstanceName
MyClasses.Remove (1)
MsgBox MyClasses.Item(1).InstanceName
End Sub

Ответить

Номер ответа: 15
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #15
Добавлено: 05.12.02 15:38
Я был более, чем уверен, что удаление элемента из коллекции, удалает элемент, но не меняет индекс остальных элементов. Но теперь получается, что я нес полный бред. Прошу прощения, я был не прав.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам