Использование массивов и коллекций для управления данными
В этой лекции вы узнаете, как:
- организовывать информацию в массивы фиксированной длины и динамические массивы;
- сохранять данные массива при изменении его размера;
- манипулировать коллекцией Controls формы;
- использовать цикл For Each...Next для перебора объектов, входящих в коллекцию;
- создавать собственные коллекции для работы со строковыми данными.
Управление информацией в приложении Microsoft Visual Basic .NET является очень важной задачей, и при возникновении более серьезных задач, для хранения и обработки данных вам потребуются дополнительные инструменты. В этой лекции вы узнаете, как организовать переменные и другую информацию в виде удобных контейнеров, называемых массивами. Массивы упрощают процесс управления данными, когда у вас несколько десятков или более элементов данных, и они дают прекрасное введение в методики работы с базами данных, о которых вы узнаете далее в этой книге. Вы также узнаете, как использовать для управления информацией в программе на Visual Basic группы объектов, называемые коллекциями, и как обрабатывать коллекции с помощью специального цикла For Each...Next. Рассмотренные массивы и коллекции вместе являются великолепными инструментами для управления большими объемами информации в программе.
Что нового в Visual Basic .NET?
- Массивы в Visual Basic .NET всегда отсчитываются с нуля, то есть младший элемент массива всегда имеет индекс 0. В Visual Basic 6 оператор Option Base позволял программистам устанавливать начало отсчета либо на 0, либо на 1. Option Base больше не поддерживается.
- Так как массивы всегда отсчитываются с 0, их нельзя больше объявлять с помощью ключевого слова To с указанием нижней и верхней границ массива. Другой стороной такого положения дел является то, что оператор LBound всегда возвращает 0, так как нижняя граница массива всегда равна 0. (Однако оператор UBound продолжает возвращать старший индекс массива, который равен количеству элементов минус 1.)
-
Массивы могут теперь объявляться и им могут присваиваться данные с помощью одного и того же оператора программы. Например, синтаксис для объявления массива с именем myList() и добавления в него четырех элементов будет иметь вид
Dim myList() as Integer = {5, 10, 15, 20}
- Оператор ReDim в Visual Basic .NET по-прежнему доступен, хотя его и нельзя использовать для изменения количества размерностей в существующем массиве. Также нельзя использовать оператор ReDim при первоначальном объявлении.
- В Visual Basic больше нет единого типа данных Collection. Вместо этого функциональность коллекций обеспечивается через пространство имен System.Collections библиотеки классов Microsoft .NET Framework. Используя System.Collections можно получить доступ к различным типам коллекций, таким, как Stack, Queue, Dictionary и Hashtable.
- Visual Basic больше не поддерживает массивы элементов управления (коллекции элементов управления, которые используют одно и то же имя и обрабатываются как единая группа), и нельзя объединять элементы управления с помощью буфера обмена, как это делалось в Visual Basic 6. Однако по-прежнему можно сохранять элементы управления в массиве, если массив объявлен с типом объекта.
Работа с массивами переменных
Массивы являются мощным и проверенным временем механизмом для хранения данных программы - разработчики BASIC, Pascal, C и других популярных языков программирования для ссылки на группы значений с помощью одного имени и обработки этих значений включали массивы в самые первые версии этих продуктов.
Массивы полезны тем, что они помогают обрабатывать большие объемы данных такими способами, которые оказались бы нереализуемыми при использовании традиционных переменных. Например, представьте создание в программе бейсбольной доски счета девяти подач. Чтобы сохранить счет для каждой подачи, вы могли бы попытаться создать в программе две группы по 9 переменных (всего 18 переменных). Чтобы сделать их понятными, вы, вероятно, назвали бы их как-нибудь типа Inning1VisitingTeam, Inning1HomeTeam и т.д. Работа с этими переменными по отдельности потребовала бы значительного времени и места в программе. К счастью Visual Basic позволяет организовать группы похожих переменных в массив с одним общим именем и легким в использовании индексом. Например, чтобы хранить счет бейсбольной игры, можно создать двумерный (2 на 9) массив с именем Scoreboard. Как это сделать?
Создание массива
Массивы в коде программы объявляются точно так же, как переменные. Как обычно, место, в котором вы объявляете массив, определяет, где его можно использовать (его область видимости). Если массив объявлен локально для процедуры, то его можно использовать только в этой процедуре. Если массив объявлен в верхней части формы, то его можно использовать во всей форме. Если массив объявлен открытым в стандартном модуле, его можно использовать в любом месте проекта. Обычно при объявлении массива в оператор объявления включают следующую информацию.
Информация в операторе объявления массива | Описание |
---|---|
Имя массива | Имя, которое будет использовано для представления массива в программе. В основном, имена массивов подчиняются тем же правилам, что и имена переменных. (За дополнительной информацией о переменных обратитесь к "Переменные и операторы Visual Basic .NET" .) |
Тип данных | Тип данных, хранимых в массиве. В большинстве случаев все переменные в массиве будут относиться к одному и тому же типу данных. Можно указать один из базовых типов данных, или, если вы не уверены в том, какой тип данных будет храниться в массиве. Если вы будете хранить данные разных типов, то можете указать тип Object. |
Число измерений | Число измерений, содержащихся в массиве. Большинство массивов являются одномерными (список значений) или двумерными (таблица значений), но, если вы работаете со сложной математической моделью, такой, как трехмерная фигура, то можете указать дополнительные измерения. |
Число элементов | Число элементов, содержащихся в массиве. Элементы в массиве непосредственно связаны с индексом массива. В Visual Basic .NET первый индекс массива всегда 0. |
Объявление массива фиксированной длины
Базовый синтаксис открытого массива фиксированной длины такой:
Dim Имя_массива(объявление_индекса1, объявление_индекса 2, ...) As тип_данных
Здесь важную роль играют следующие аргументы.
- Dim - это ключевое слово, которое объявляет массив. Если вы помещаете массив в стандартный модуль, то используйте вместо него слово Public.
- Имя_массива - это имя переменной массива.
- объявление_индекса1 - это верхняя граница первого измерения массива, которая равняется количеству элементов минус 1.
- объявление_индекса2 - это верхняя граница второго измерения массива, которая равняется количеству элементов минус 1. (Через запятую можно добавлять дополнительные измерения массива.)
- тип_данных - это ключевое слово, соответствующее типу данных, которые будут содержаться в этом массиве.
Например, чтобы объявить одномерный строковый массив с именем Employees, которые может хранить 10 имен сотрудников (пронумерованных от 0 до 9), необходимо ввести в процедуре события следующую строку:
Dim Employees(9) As String
В стандартном модуле это же объявление массива будет выглядеть так:
Public Employees(9) As String
Когда вы создаете массив, Visual Basic выделяет для него место в памяти. На следующей иллюстрация показана концепция организации массива. 10 элементов массива пронумерованы от 0 до 9, а не от 1 до 10, так как индексы массива всегда начинаются с 0. (Оператор Option Base из Visual Basic 6, который позволял вам индексировать массивы, начиная с 1, больше не поддерживается.)
Чтобы объявить открытый двумерный массив с именем Scoreboard, который может хранить две строки и девять столбцов данных типа короткого целого, нужно ввести в процедуре события или в верхней части формы такой оператор:
Dim Scoreboard(1, 8) As Short
Когда вы создаете двумерный массив, Visual Basic выделяет для него место в памяти. Затем вы можете использовать этот массив в вашей программе так, как будто это таблица значений, как показано на следующей иллюстрации. (В этом случае элементы массива пронумерованы от 0 до 1 и от 0 до 8.)