Массив

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Массив

Сообщение CORBA » 19.07.2005 (Вт) 23:39

Ковырялся с массивами и обнаружил что строка
Код: Выделить всё
Dim mas() as Integer
ошибки не даёт, я подумал что таким образом объявляется динамический массив, хотя наверное ошибся, так как использовать у меня этот массив не получилось. Чтоже означает такое объявление?
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.07.2005 (Вт) 23:43

Оно означает, что объявляется динамический массив :-)
Перед использованием ему надо задать размер оператором ReDim.
Изображение

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 19.07.2005 (Вт) 23:46

спасибо, чутьё меня не подвело :)
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 22.07.2005 (Пт) 9:25

А если встретится тебе такой случай, когда потребуется увеличить или уменьшить размер массива и при этом не потерять садержащиеся данные то к оператору ReDim надо добавить Preserve и данные сохранятся.

ReDim Preserve mas(x)

Простое применение ReDim сбрасывает содержимое.

PS: В моем опыте программирования на VBA был случай, когда Preserve работал только с одномерным массивом, с двумерными и более выскакивало сообщение об ошибке, массив не увеличивался.
Данную запинку не изучал, не помню как вывернулся, если кто чтонибудь знает - поделитесь.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 22.07.2005 (Пт) 9:45

Попробуй как в паскале - объявить одномерный массив, каждый элемент которого есть другой одномерный массив. И ресайзай их наздоровье.
А я все практикую лечение травами...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.07.2005 (Пт) 9:49

shyrik_m писал(а):PS: В моем опыте программирования на VBA был случай, когда Preserve работал только с одномерным массивом, с двумерными и более выскакивало сообщение об ошибке, массив не увеличивался.
Данную запинку не изучал, не помню как вывернулся, если кто чтонибудь знает - поделитесь.

С помощью Preserve можно изменять только последнюю размерность массива.
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.07.2005 (Пт) 9:57

Павлов Максим писал(а):Попробуй как в паскале - объявить одномерный массив, каждый элемент которого есть другой одномерный массив. И ресайзай их наздоровье.


а в VB это как будет выглядеть? для примера
Весь мир матрица, а мы в нем потоки байтов!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 22.07.2005 (Пт) 10:02

У меня ЩААС ВБ не стоит - не могу поэксперементировать.

Но я б создал коллекцию массивов, это я думаю не требует объяснений? :wink:
А я все практикую лечение травами...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.07.2005 (Пт) 10:18

То есть предполагается что-то вроде вот этого:

Код: Выделить всё
Dim a1(0 To 9) As Integer
Dim a2(0 To 9) As Integer
Dim a(0 To 1) As Variant
a(0) = a1
a(1) = a2
a(0)(0) = 10


коряво, но работает.

Только вот для ресайза придется либо обращаться к исходным массивам, то есть к a1 или к a2. либо извлекать массив из массива массивов, делать ресайз и возвращать его обратно.

Сложно получается
Весь мир матрица, а мы в нем потоки байтов!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 22.07.2005 (Пт) 10:22

Попробуй вместо а (который Variant) коллекцию. Там при добавлении и удалении ресайзать не надо.
А я все практикую лечение травами...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.07.2005 (Пт) 10:25

SuperArray = Array(Array(1,2,3),Array(1,Array(1,2),2),3)
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.07.2005 (Сб) 7:32

alibek, так тут та же проблема, ресайз напрямую не сделать.

А вот насчет коллекции вместо супермассива - это интересно.

Ну а в конце то концов, если уж ОЧЕНЬ нужен ресайз многоразмерных массивов, то можно и специальный класс накатать, который сможет это все делать
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 118

    TopList