000106. Массивы и структуры

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

cs
struct StructName {

 var1;
 var2;
 // ...
 varN;

};

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

cs
struct PC {

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

};

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

cs
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, которая является структурой. В нашем "потоке" мы можем создать переменную этого типа и выполнять какие-то действия над ней. Давайте заполним её информацией:

cs
public Thread() {

 PC MyComp;

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

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

cs
public Thread() {

 // ...

 string MySTR;
 int A, B;

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

}

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

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

cs
int[] Array = new int[5];

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

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

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

cs
PC[] ArrayPC = new PC[3];

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

cs
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 элементов.

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

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

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

cs
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". Схематично данный пример можно изобразить так:

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

На этом урок окончен. ;)|783|1|0|60936603png313`40

`\|17216150`png`310`114

\|21297514png309199

`\|98372554`png`217`157

`||sktruktury|1511984921

Last updated