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

Тема в разделе "Lotus - Программирование", создана пользователем MMN, 14 сен 2009.

  1. MMN

    MMN Well-Known Member

    Регистрация:
    11 дек 2008
    Сообщения:
    97
    Симпатии:
    0
    основывапясь на хелпе пытаюсь создать двухмерный массив.
    если брать пример, то это выглядит так

    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


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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    здесь скорее не наращивают второй элемент.. а переопределяют массив в целом
    раньше массив был 2х2 стал 2х3
     
  3. amigolinx

    amigolinx Гость

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    amigolinx
    Где массив задан явным образом???

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

    amigolinx Гость

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

    MMN Well-Known Member

    Регистрация:
    11 дек 2008
    Сообщения:
    97
    Симпатии:
    0
    ничего сверх гениального. хотел написать функцию по добавлению в двух мерный массив элементов.

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Так в хелпе же сказано - можно менять только границу последнего измерения, т.е
    2х2
    2х3
    2х4
    2х5
     
  8. amigolinx

    amigolinx Гость

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    можно... только ты потеряешь все данные массива
    из этого выражения ReDim Preserve markMar(5,2) убери Preserve - получишь массив 5х2, но тогда все элементы обнулятся
    Тут уже действительно получится переопределение массива... и переопределять можно любую границу
     
  10. MMN

    MMN Well-Known Member

    Регистрация:
    11 дек 2008
    Сообщения:
    97
    Симпатии:
    0
    это я уже пробывал ))



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

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    как по мне через класс было бы на порядок менее геморойно
     
  12. K-Fire

    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) использовать нормальные проперти объектов.
     
  13. MMN

    MMN Well-Known Member

    Регистрация:
    11 дек 2008
    Сообщения:
    97
    Симпатии:
    0
    а подробнее для начинающих можно ??
     
  14. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    MMN
    простой пример

    Код (Text):
    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
     
  15. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    за достаточно долгую программистскую практику, использовал многомерные массивы только в "начале пути"
    оправдано в математике, но в реальной жизни, редко сталкиваешься с необходимостью многомерных массивов
     
Загрузка...

Поделиться этой страницей