Similar presentations:
Массивы
1.
Массивы2.
1. Определение массиваХранение
группы связанных элементов данных
является основным требованием большинства
программных приложений. Для этого существуют
два основных способа: массивы и коллекции.
Индексный
массив
—
именованный
набор
однотипных переменных, расположенных в памяти
непосредственно друг за другом, доступ к которым
осуществляется по индексу.
Коллекция
в программировании — программный
объект, содержащий в себе, тем или иным образом,
набор значений одного или различных типов, и
позволяющий обращаться к этим значениям.
3.
Массивыявляются
одного типа.
коллекциями
объектов
Размер
массива должен быть указан при его
создании.
Каждый
элемент
массива
доступен
по
числовому индексу, указывающему позицию
или ячейку, в которой объект хранится в
массиве.
Массивы
могут хранить как ссылочные типы,
так и типы значений.
Массив является индексированной коллекцией
объектов.
4.
2. Одномерный массивтип_элемента[] имя_массива;
int[] myArray1;
5.
Инициализация одномерного массива1) инициализация массива с использованием
ключевого слова new:
int[] m1 = new int[] {10,20,30,40,50};
2) инициализации строкового массива без
использования слова new:
string[] m2 = { «Фамилия», «Имя»,
«Отчество» };
3) используем ключевое слово new и желаемый
размер массива символов:
char[] m3 = new char[4] { ‘Я’,’з’,’ы’,’к’ };
6.
4) без указания типа после ключевого словаnew:
int[] m4 = new[] { 1, 2, 3, 5 };
5) длина массива вводится с клавиатуры:
int n = Convert.ToInt32(Console.ReadLine());
int[] m5 = new int [n];
7.
Индексация массивов начинается с нуля,поэтому номер первого элемента массива
равен 0.
Обращение
к
элементу
массива
осуществляется через квадратные скобки
[ ].
myArray1[0]=17;
8.
3. Многомерный массивОбъявление многомерного массива
тип[,…,] имя_массива = new тип[размер1,
размер2, … размеры];
Объявление двумерного массива
тип[,] имя_массива = new тип[размер1,
размер2];
int[,] nums1;
9.
Инициализация двумерного массиваint[,] nums2 = new int[2, 3];//по умолчанию 0
int[,] nums3 = new int[2, 3] {{ 0, 1, 2 },{ 3, 4, 5 } };
int[,] nums4 = new int[,] { { 0, 1, 2 }, { 3, 4, 5 } };
int[,] nums5 = new [,]{{ 0, 1, 2 },{ 3, 4, 5 }};
int[,] nums6 = {{ 0, 1, 2 },{ 3, 4, 5 }};
int[,] nums7 = new int [n,m];
10.
Нумерация элементов начинается с 0;Обращение к элементу массива:
mas[0,0]=10;
11.
4. Генератор случайных чиселОбъявление переменной для генерации
чисел
Random x = new Random();
или
var x = new Random()
12.
Неявнотипизированные переменные – это
переменные, для которых отсутствует определение
типа при их объявлении (например int, float).
Вместо названия типа используется ключевое слово
var.
При
объявлении
неявно
типизированной
переменной тип этой переменной определяется
компилятором на основе значения которым она
инициализируется.
Если
инициализирующее
значение
есть
целочисленным, то переменная получает тип int.
Неявно
типизированная переменная обязательно
должна быть инициализирована при ее объявлении.
13.
Генерация целых случайных чиселC# имеет 3 перегруженных метода:
1. Возвращает значение большее нуля. Максимальное число
больше 10 миллионов:
int n = x.Next();
2. Возвращает значение имеющееся в промежутке (min,max).
При этом min значение входит в случайное число, а max не
входит:
int n = x.Next(-100, 100);
3. Возвращает целое положительное число не больше
максимального:
int n = x.Next(10);
При этом максимальное число также не входит в генерацию
случайных чисел, то есть в данном случае от 0 до 9.
14.
Генерация дробных случайных чиселdouble r = Convert.ToDouble(x.Next(-100, 100)/10.0);
//генерируются числа от -10 до 9.9.
double r = Convert.ToDouble(x.Next(100)/10.0);
//генерируются числа от 0 до 9.9.
15.
5. Ввод и вывод элементов одномерногомассива
16.
17.
6. Ввод и вывод элементов двумерногомассива
18.
19.
7. Цикл foreachДля
одномерных
массивов
оператор
foreach
обрабатывает элементы в порядке возрастания
индекса, начиная с индекса 0 и заканчивая индексом
Length - 1:
foreach (тип имя_переменной_цикла in массив)
{
оператор;
}
20.
Когда цикл начинается, первый элементмассива
выбирается
и
присваивается
переменной цикла.
На каждом последующем шаге итерации
выбирается следующий элемент массива,
который сохраняется в переменной цикла.
Цикл завершается, когда все
массива окажутся выбранными.
элементы
Значения элементов
изменять нельзя
в
массива
цикле
21.
22.
23.
8. Массив массивов (“зубчатый массив”)int[][] nums = new int[3][];
nums[0] = new int[2] { 1, 2 }; // выделяем
память для первого подмассива
nums[1] = new int[3] { 1, 2, 3 };// выделяем
память для второго подмассива
nums[2] = new int[5] { 1, 2, 3, 4, 5 }; //
выделяем память для третьего подмассив
24.
Две группы квадратных скобок указывают,что это массив массивов, то есть такой
массив, который в свою очередь
содержит в себе другие массивы.
Длина массива указывается только в
первых
квадратных
скобках,
все
последующие квадратные скобки должны
быть пусты: new int[3][].
В данном случае у нас массив nums
содержит
три
массива.
Причем
размерность каждого из этих массивов
может не совпадать.
25.
26.
Перебор элементов многомерногомассива
for (int i = 0; i < numbers.Length; i++)
{
for (int j = 0; j < numbers[i].Length; j++)
{
Console.Write($"{numbers[i][j]} \t");
}
Console.WriteLine();
}
27.
28.
9. Неявно типизированные массивыvar имя_массива = new[] { значение1,
значение2, ..., значениеN }
имя_массива – непосредственно имя массива;
значение1, значение2, значениеN – набор значений,
которые получают элементы массива. На основе
типа данных этих значений определяется тип
элементов массива.
29.
// пример объявления неявно типизированныходномерных массивов
var A = new[] { 5, 10, 23, 16, 8 }; // тип элементов массива int, количество элементов – 5
var B = new[] { true, false, false }; // тип элементов bool,
количество элементов - 3
var C = new[] { 'A', ';', '\'', '\n', '5', 'z' }; // тип элементов char,
количество – 6
var X = new[] { 2.86, 2.0, 3.5 }; // тип элементов double,
количество – 3
int d; bool b; char c; float f;
d = A[2]; // d = 23
b = B[1]; // b = false
c = C[4]; // c = '5’
f = (float)X[2]; // f = 3.5
30.
31.
10. Определение массива объектовВ большинстве случаев при определении массива
тип элемента, содержащегося
указывается явно.
в
массиве,
В
основе каждого типа в системе типов .NET в
конечном
итоге
лежит
базовый
класс
System.Object.
В
результате
получается,
что
в
случае
определения массива объектов находящиеся
внутри него элементы могут представлять собой
что угодно:
32.
имя_массива =значение2, ..., значениеN }
object[]
имя_массива
элементов]
object[]
new[]
=new
{
значение1,
object[количество
33.
34.
11. Класс ArrayМассивы реализуются в C# в виде объектов.
Ключевое слово ООП — класс, в библиотеке
System имеется статический класс Array.
Класс
Array определяет ряд свойств и
методов, которые используются при работе с
массивами.
35.
Свойство Rank возвращает размерностьмассива (одномерный, двумерный и т.д.).
int[] a=new int[] { 1,2,3,4};
int n= a.Rank //1
Статический метод Clear() очищает массив,
устанавливая для всех его элементов
значение по умолчанию.
Array.Clear(a,0,a.Length);
//Значения элементов массива =0
36.
Статическийметод Copy() копирует часть
одного массива в другой массив.
37.
Статическийметод
Exists()
проверяет,
содержит ли массив определенный элемент.
38.
Статический метод Find() находит элемент,который удовлетворяет определенному условию
39.
Статический метод FindAll() находит все элементы,которые удовлетворяет определенному условию
40.
Статический метод IndexOf() возвращаетиндекс элемента.
41.
Статическийметод Resize() изменяет размер
одномерного массива.
42.
Статический метод Reverse() располагаетэлементы массива в обратном порядке.
43.
12. Свойство Lengthсвойство Length, содержит число элементов, из которых
может состоять массив.
44.
13. Сортировка и поискСтатический метод BinarySearch() выполняет
бинарный поиск в отсортированном массиве.
Статический метод Sort() сортирует элементы
одномерного массива.
45.
46.
Sort – этот метод использует алгоритм реализующийинтроспективную сортировку (introsort) следующим образом:
Если размер массива меньше 16 элементов, используется
сортировка вставками.
Если число элементов превышает 2logN, где N диапазон
входного массива, используется пирамидальная сортировка.
В противном случае используется алгоритм быстрой
сортировки.
Introsort или интроспективная сортировка — алгоритм
сортировки, предложенный Дэвидом Мюссером в 1997 году. Он
использует
быструю
сортировку
и
переключается
на
пирамидальную сортировку, когда глубина рекурсии превысит
некоторый заранее установленный уровень (например, логарифм
от числа сортируемых элементов).