138.90K
Категория: ПрограммированиеПрограммирование

Классы_массивы

1.

Массивы элементов
класса

2.

2
Массивы элементов класса
Пусть есть класс MyClass со свойствами
Property1 и Property2 типа int
и методом ToString
Массив из 5 элементов класса:
MyClass[] myClassArray = new MyClass[5];
Обращение к свойствам первого элемента массива:
myClassArray[0].Property1 и myClassArray[0].Property2
Вывод на консоль всех элементов массива
for (int i = 0; i < 5; i++)
{
Console.WriteLine(ToString(myClassArray[i]));
}

3.

3
Списки (динамические массивы)
элементов класса
Пусть есть класс MyClass со свойствами Property1 и
Property2 типа int и методом ToString
Список элементов класса произвольной длины:
List<MyClass> myClassList = new List<MyClass>();
while (. . .)
{
myClassList.Add(new MyClass(число1, число2));
. . .
}
Обращение к свойствам элементов и вывод всех элементов
списка – так же, как для массива.

4.

Сравнение элементов класса
4
Для экземпляров класса MyClass нет понятия сравнения элементов
Возможно сравнение по значению одного из свойств (ключу)
Для этого в классе MyClass должен быть предусмотрен метод
сравнения
// сравнение по полю p1
public int CompareTo(MyClass obj)
{
return p1.CompareTo(obj1.p1);
}
Объекты obj – экземпляр MyClass.
Этот метод используется в стандартной сортировке так:
Array.Sort(myClassList);

5.

Сравнение элементов класса
5
Другой способ - сравнение двух объектов:
// сравнение по полю p1
static public int CompareP1(MyClass obj1, MyClass obj2)
{
return obj1.p1.CompareTo(obj2.p1);
}
Объекты obj1 и obj2 – экземпляры MyClass
Сортировка:
myClassList.Sort(MyClass.CompareP1);
Этот способ позволяет создать несколько методов для сравнения
по нескольким ключам.
Важно! Требуется подключение библиотеки:
using System.Collections.Generic;

6.

6
Бинарный поиск в списке элементов класса
Для реализации бинарного поиска в dll должен быть предусмотрен еще
один класс – метод сравнения
public class ComparerP1 : IСomparer <MyClass>
{
public int Compare(MyClass obj1, MyClass obj2)
{
if (obj1 == null || obj2 == null)
{
return 0;
}
return obj1.p1.CompareTo(obj2.p1);
}
}
Этот класс должен находиться вне класса MyClass, но в том же файле
(значит и в той же dll)

7.

7
Бинарный поиск в списке элементов класса
Вызов метода BinarySearch в этом случае будет выглядеть так:
MyClass obj = new MyClass;
// создаем фиктивный объект класса MyClass
obj.p1 = искомое значение;
obj.p2 = произвольное значение;
int n = myArray.BinarySearch(obj, new ComparerP1());
n будет содержать номер искомого элемента в массиве или списке.
Если элемент отсутствует, n будет отрицательным.
Важно!
1. Бинарный поиск работает только в массиве, отсортированном по
возрастанию соответствующего свойства.
2. Если искомых элементов несколько, поиск возвращает номер
одного из них, необязательно первого

8.

Лекция окончена
Спасибо за внимание

English     Русский Правила