• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Двухмерный массив

  • Автор темы MMN
  • Дата начала
M

MMN

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

Option Base 1
' Declare a two-dimensional dynamic array, of Variant type.
ReDim markMar(2, 2)
' Assign a value to each element.
markMar(1, 1) = 1
markMar(2, 1) = 2
markMar(1, 2) = 3
markMar(2, 2) = 4
' Change the upper bound of the last dimension of markMar
' from 2 to 3, preserving the values already stored in
' existing elements of markMar.
ReDim Preserve markMar(2,3)
' Assign values to the additional elements of markMar.
markMar(1, 3) = 5
markMar(2, 3) = 6


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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
здесь скорее не наращивают второй элемент.. а переопределяют массив в целом
раньше массив был 2х2 стал 2х3
 
A

amigolinx

если я пытаюсь нарастить первый, то вылетаем в ошибку.
А каким кодом пытаетесь нарастить первое измерение? Если объявить массив при помощи
Код:
Dim mArr As Variant
то потом можно будет наращивать при необходимости любое из измерений ;)
А в хелпе масиив объявлен явным образом - с изначальным заданием размерности, поэтому и позволяет менять только последнее измерение
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
amigolinx
Где массив задан явным образом???

автор, код в студию! чего ты там пишешь?
 
A

amigolinx

NickProstoNick Может наспех некорректно выразился, я имел в виду что при конструкции типа ReDim markMar(2, 2) массиву задаются четкие границы и можно будет наращивать только последнее измерение (о чем кстати в том же хелпе и сказано)
 
M

MMN

ничего сверх гениального. хотел написать функцию по добавлению в двух мерный массив элементов.

здесь скорее не наращивают второй элемент.. а переопределяют массив в целом
раньше массив был 2х2 стал 2х3
хотел наращивать массив
2х2
3х2
4х2
5х2
 
N

nvyush

ничего сверх гениального. хотел написать функцию по добавлению в двух мерный массив элементов.


хотел наращивать массив
2х2
3х2
4х2
5х2

Так в хелпе же сказано - можно менять только границу последнего измерения, т.е
2х2
2х3
2х4
2х5
 
A

amigolinx

MMN
Хм, прикол, однако... Я уж было чертечто подумал ;) А почему тогда наоборот не подходит наращивать по хелповскому? А там уж дальше читаем нужные элементы с нужных измерений...
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
можно... только ты потеряешь все данные массива
из этого выражения ReDim Preserve markMar(5,2) убери Preserve - получишь массив 5х2, но тогда все элементы обнулятся
Тут уже действительно получится переопределение массива... и переопределять можно любую границу
 
M

MMN

можно... только ты потеряешь все данные массива
из этого выражения ReDim Preserve markMar(5,2) убери Preserve - получишь массив 5х2, но тогда все элементы обнулятся
это я уже пробывал ))



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

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
как по мне через класс было бы на порядок менее геморойно
 
K

K-Fire

вместо двумерного массива можно использовать список массивов. Т.е.

Dim yourArray List as Variant
Dim mass(1 to 2) as String

И дальше в цикле по i:

mass(1) = "aaaa"
mass(2) = "zzzz"
yourArray(cstr(i)) = mass

А вообще, лучше сразу вместо массива использовать классы, и вместо mass(i) использовать нормальные проперти объектов.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
MMN
простой пример

Код:
Class ClassAgent ' Инфа по агенту
Public Name As String
Public Alias As String
Public Comment As String
Public IsEnabled As Boolean
Public LastRun As Variant

Sub GetInfoFromAgent(Agent As Variant) ' Берем всю инфу из агента
Me.Name = Agent.Name
Me.Alias = Me.Name
If Instr(Me.Alias, "|")>0 Then Me.Alias = Strright(Me.Alias, "|")
Me.Comment = Agent.Comment
Me.IsEnabled = Agent.IsEnabled
Me.LastRun = Agent.LastRun
End Sub
End Class

Class MasClassAgent ' Массив агентов
Public Count As Integer
Public Rec() As ClassAgent

Sub New
Count = -1
End Sub


.......
End Class
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
за достаточно долгую программистскую практику, использовал многомерные массивы только в "начале пути"
оправдано в математике, но в реальной жизни, редко сталкиваешься с необходимостью многомерных массивов
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!