Массив Массивов

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Массив Массивов

Сообщение 1Steps » 30.05.2007 (Ср) 5:51

Код: Выделить всё
        Dim arrColumn(5) As Object
........................................................
        arrColumn(0) = arrCol1
        arrColumn(1) = arrCol2
        arrColumn(2) = arrCol3
        arrColumn(3) = arrCol4
        arrColumn(4) = arrCol5
        arrColumn(5) = arrCol6
......................................................
        Dim UB as Integer = arrColumn.GetUpperBound(3)


В последней строчке ошибка.

Вопрос:
Как узнать верхнюю границу, допустим, четвертого массива?

Спасибо!
Удалена за ненадобностью.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 30.05.2007 (Ср) 6:37

Если я не ошибаюсь то массивом массивов называют Jagged Array. У тебя обычный одномерный массив.
В твоем случае примерно так:

Код: Выделить всё
Dim UB as Integer = CType(arrColumn(3),array).GetUpperBound(?)

Знак вопрося замени на размерность.
А зачем ты массив обьявляешь As Object?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 30.05.2007 (Ср) 6:50

Код: Выделить всё
        Dim arrColumn(5) As Array
        Dim arrCol1() As Integer = New Integer() {1, 2, 3}

        arrColumn(3) = arrCol1

        Dim UB As Integer = arrColumn(3).GetUpperBound(0)
        MsgBox(UB)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 31.05.2007 (Чт) 0:53

Насколько я понимаю, то
Код: Выделить всё
Dim arrColumn(5) As Object

и
Код: Выделить всё
Dim arrColumn()()()()()() As Object

одно и тоже.

As Object - потому, что один массив String, второй Date, третий Integer и т.д.
Это я вычитал в одной книге.
А что, неправильно?
Код: Выделить всё
Dim UB As Integer = arrColumn(3).GetUpperBound(0)

Спасибо, работает.
Последний раз редактировалось 1Steps 31.05.2007 (Чт) 1:33, всего редактировалось 1 раз.
Удалена за ненадобностью.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 31.05.2007 (Чт) 1:28

Ещё вопрос:
Есть функция
Код: Выделить всё
Public Function InStore_Game(ByVal A As Integer, ByRef B As Integer, ByVal C As Integer) As Integer

Как сделать так что бы третий параметр "С" был по умолчанию.
Т.е., что бы его можно было принимать или не принимать.
Удалена за ненадобностью.

AndreyG_80
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 169
Зарегистрирован: 10.03.2006 (Пт) 13:27

Сообщение AndreyG_80 » 31.05.2007 (Чт) 1:36

Есть такая вещь, как Optional
Например:
Код: Выделить всё
Public Function InStore_Game(ByVal A As Integer, ByRef B As Integer, Optional ByVal C As Integer=ТвоеЗначениеПоУмолчанию) As Integer

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 31.05.2007 (Чт) 2:56

Спасибо!!!
Удалена за ненадобностью.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 31.05.2007 (Чт) 6:26

Есть два типа многомерных массивов: прямоугольные и jagged-массивы
Код: Выделить всё
'прямоугольный
Dim A as Integer(,) = New Integer(,){{1,2},{3,4}}

'jagged
Dim B as Integer()()=New Integer()(){}
B(0) = New Integer(){1,2}
B(1) = New Integer(){3,4,5}
В отличие от прямоугольных массивов строки в jagged-массивах могут быть разной длины.
Хотя эта разница стирается если ты обьявляешь массив as object
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 01.06.2007 (Пт) 1:19

jagged-массивы

Это то, что мне нужно.
Огромное спасибо.
Удалена за ненадобностью.

xmen
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 11.05.2008 (Вс) 9:01

Сообщение xmen » 11.05.2008 (Вс) 10:22

Здравствуйте, Nord777.
Я посмотрел на Ваш пример Jagged arrays:
Код: Выделить всё
'jagged
Dim B as Integer()()=New Integer()(){}
B(0) = New Integer(){1,2}
B(1) = New Integer(){3,4,5}

Уменя пишет ошибку, что я делаю не правильно. VB. Net 2008.
Не могли ли Вы мне помочь с примером? Мне нужен jagged array без ограничения.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 11.05.2008 (Вс) 15:13

Ошибка потому, что массив не проинициализирован. Перед строкой B(0) = New Integer(){1,2} нужно вставить ReDim B(1)

Лови еще одну разновидность(я не понял, что ты имеешь ввиду под словами "без ограничения")
Код: Выделить всё
    Dim B As Integer()()
    ReDim B(2)
    B(0) = New Integer() {1, 2}

    Dim Arr1(10) As Integer
    B(1) = Arr1

    ReDim Preserve B(1)(11)
    B(1)(11) = 255
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

xmen
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 11.05.2008 (Вс) 9:01

Сообщение xmen » 11.05.2008 (Вс) 17:50

Большое Спасибо! Это как раз то что нужно. :D

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 17.05.2008 (Сб) 11:09

Не стал создавать новый топик, раз уж здесь про массивы говорят.
В VB было возможно создать массив что называется на лету
f=Array(1,2,3,4,5)
Когда я попробовал создать массив в VB.NET у меня странное что-то получается. Array подчеркивается и кричит что типа это тип (Извеняюсь за тафтологию) и нельзя его так использовать.
В документации ничего путного не нашел - Все также как и в VB6. Почему не работает не знаю.
Подскажите как создать массив на лету?
Пишите жизнь на чистовик.....переписать не удастся.....

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 17.05.2008 (Сб) 21:40

Код: Выделить всё
     Dim f() As Integer
    f = New Integer() {1, 2, 3, 4, 5}
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 18.05.2008 (Вс) 21:42

Спасибо. Я уж растерялся было... :oops:
Пишите жизнь на чистовик.....переписать не удастся.....

vick2312
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 17.10.2008 (Пт) 17:43

Re: Массив Массивов

Сообщение vick2312 » 25.10.2008 (Сб) 22:14

Nord777 писал(а):[syntax="vb"] Dim f() As Integer

f = New Integer() {1, 2, 3, 4, 5}[/syntax]

тут, к тому же, можно и объединить обе строки:
Код: Выделить всё
Dim f() As Integer = New Integer() {1, 2, 3, 4, 5}
:|


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList