Рейтинг - 5.0 (1)

Всем привет! Сегодня мы будем разбирать понятие структуры и научимся с ней работать.

Прежде всего хочу сказать, что структура - это пользовательский набор данных. Этот набор может содержать различные типы данных и функции. Синтаксис написания таков:

struct StructName {

 var1;
 var2;
 // ...
 varN;

};

Создавать структуру нужно в месте, где к ней можно получить доступ. Xто бы можно получать доступ её свойствам с любого места, эти элементы должны быть открытые ( public ). В качестве примера, создадим структуру с именем PC, и добавим ей поля, которые можно сделать с этой структурой.

struct PC {

 public string CompName;
 public int VideoCard;
 public int Processor;

};

Как видим, наша структура состоит из 3-х полей - Имя Компьютера, параметры видеокарты и к-во ядер процессора. Добавим эту структуру в код c#:

using System;
using GTA;

namespace TestScript {

 public class Thread : Script {

 struct PC {
 public string CompName;
 public int VideoCard;
 public int Processor;
 };

 public Thread() { }

 }

}

Как видим, структура создана до функции "Thread", что бы она была видима нашему "потоку". Теперь мы создали свой тип данных - PC, которая является структурой. В нашем "потоке" мы можем создать переменную этого типа и выполнять какие-то действия над ней. Давайте заполним её информацией:

public Thread() {

 PC MyComp;

 MyComp.CompName = "WMYSTERIO-PC";
 MyComp.VideoCard = 512;
 MyComp.Processor = 2;
 
}

Обращение к полям структуры делается через точку. Чтобы считать данные из структуры, мы должны создать переменную того же типа, что и поле структуры:

public Thread() {

 // ...

 string MySTR;
 int A, B;

 MySTR = MyComp.CompName;
 A = MyComp.VideoCard;
 B = MyComp.Processor; 

}

По этому же принципу делались структуры и в GTA SA, адреса полей которых мы считывали через игровую память с помощью Sanny Builder. Размер структуры может быть любым и содержать любые данные, а не только целые и дробные числа. Например, структура может содержать в себе другую структуру, внутри которой массив объектов какого-то класса, а сам класс может содержать свои методы и свои структуры. В общем: иерархия может быть огромной. Главное, что бы мозги не лопнули содержать всё в памяти :) Но мы ограничимся этими примерами, так пользоваться структурами будем не часто, но знать о них вы должны. Чаще всего создают классы, но о них я расскажу, когда будем изучать ООП.

Вторая часть урока посвящена массивам. Массивы в c# более гибкие, чем в Sanny Builder, так как с ними множество вариантов работы. Массив - это совокупность элементов конкретного типа. Новый экземпляр массива задаётся оператором new. Синтаксис написания таков:

int[] Array = new int[5];

Array[0] = 10;
Array[1] = 5;
Array[2] = 7;
Array[3] = 2;
Array[4] = 5;

В начале мы указываем компилятору, что мы будем создавать массив, возле типа указываем квадратные скобки. Дальше создаём новый экземпляр и в скобках указываем уже размерность нового массива. В нашем случаи массив "Array" будет состоять из 5 элементов. Ниже мы уже задаём значения для него, обращаясь по индексу. Как и в Sanny Builder, индексирование начинается с нуля.

Имея эти знания и структуру выше, мы можем сделать массив этих структур:

PC[] ArrayPC = new PC[3];

Теперь мы можем обращаться к элементам массива и задавать свои значения. Следующий код является таким примером ;)

using System;
using GTA;

namespace TestScript {
 public class Thread : Script {

 struct PC {
 public string CompName;
 public int VideoCard;
 public int Processor;
 };

 public Thread() {
 PC[] ArrayPC = new PC[3];

 ArrayPC[0].CompName = "User1";
 ArrayPC[0].Processor = 2;
 ArrayPC[0].VideoCard = 512;

 ArrayPC[1].CompName = "User2";
 ArrayPC[1].Processor = 4;
 ArrayPC[1].VideoCard = 1024;

 ArrayPC[2].CompName = "User3";
 ArrayPC[2].Processor = 8;
 ArrayPC[2].VideoCard = 2048;

 }
 }
}

До этого момента мы рассматривали одномерные массивы. То есть массивы, которые содержат ( образно ) одну строку и схематично их можно нарисовать так:

Здесь 0, 1, 2 ... N - элементы массива "ArrayPC". Так, как наш массив состоит из структур, то схематично это можно обозначить так:

Но есть и многомерные массивы, которые могут содержать строки, ряды и целые кубы ( это образно. Нужно просто представить всё и мои рисунки, надеюсь, помогут вам ) данных. Схематично двухмерный массив изображается так:

У нас имеется M массивов, каждый из которых содержит по N элементов. Это и есть двумерный массив. В "народе" такие массивы часто называют матрицей, размерностью MxN. Если предположить, что количество массивов - 3, где содержаться по 2 элемента, то всего массив может содержать 3*2=6 элементов.

Объявляются двумерные массивы следующим образом:

PC[,] ArrayPC = new PC[3,2];

В первых скобках указывается запятая. К-во запятых должно быть на единицу меньше, чем размерность массива. Во вторых: мы явно указываем эту размерность. Вот пример двухмерного массива:

using System;
using GTA;

namespace TestScript {
 public class Thread : Script {

 struct PC {
 public string CompName;
 public int VideoCard;
 public int Processor;
 };

 public Thread() {
 PC[,] ArrayPC = new PC[3,2];

 ArrayPC[0,0].CompName = "User1";
 ArrayPC[0,0].Processor = 2;
 ArrayPC[0,0].VideoCard = 512;
 ArrayPC[1,0].CompName = "User2";
 ArrayPC[1,0].Processor = 4;
 ArrayPC[1,0].VideoCard = 1024;
 ArrayPC[2,0].CompName = "User3";
 ArrayPC[2,0].Processor = 8;
 ArrayPC[2,0].VideoCard = 2048;

 ArrayPC[0, 1].CompName = "User4";
 ArrayPC[0, 1].Processor = 16;
 ArrayPC[0, 1].VideoCard = 512;
 ArrayPC[1, 1].CompName = "User5";
 ArrayPC[1, 1].Processor = 16;
 ArrayPC[1, 1].VideoCard = 2048;
 ArrayPC[2, 1].CompName = "User6";
 ArrayPC[2, 1].Processor = 1;
 ArrayPC[2, 1].VideoCard = 512;

 }
 }
}

Запись и считывание элементов также происходит по индексу. Первое число в скобках в какую строку "матрицы" будет идти запись, второе число - в какой элемент. Вот мы создали заполненный массив структур "PC". Схематично данный пример можно изобразить так:

С количеством элементов нужно ограничиваться, так как чем больше их, тем сложнее их обработка. Если их будет слишком много, то это может привести вылету игры и даже зависанию вашего ПК. Это может произойти из за того, что все рассмотренные массивы относятся к одной большой группе - статичные. К динамичным мы перейдём немного позже, а пока на этом остановимся.

На этом урок окончен. ;)


Теги: Array, struct, структуры, массивы

SanKing   (22.05.13 18:58)
Спасибо за урок.

wmysterio   (25.05.13 14:34)
Незачто smile

Надеюсь, кому-то понадобится в будущем этот материал
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Как Вы относитесь к модулям сайта: фото и видео?
Всего ответов: 0
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сегодня нас посетили:
Рекомендую
Реклама