Обобщения

Последнее обновление: 30.07.2018
Упражнение 1

Напишите обобщенный класс, который может хранить в массиве объекты любого типа. Кроме того, данный класс должен иметь методы для добавления данных в массив, удаления из массива, получения элемента из массива по индексу и метод, возвращающий длину массива.

Для упрощения работы можно пересоздавать массив при каждой операции добавления и удаления

Одно из возможных решений:

class Collection<T>
{
	T[] data;	// массив с данными
	public Collection()
	{
		data = new T[0];
	}
	// добавление данных
	public void Add(T item)
	{
		T[] newData = new T[data.Length + 1];
		for(int i = 0; i < data.Length; i++)
		{
			newData[i] = data[i];
		}
		newData[data.Length] = item;
		data = newData;
	}
	// удаление данных - удаляем первое вхождение элемента при его наличии
	public void Remove(T item)
	{
		// находим индекс элемента
		int index = -1;
		for(int i = 0; i < data.Length; i++)
		{
			if (data[i].Equals(item))
			{
				index = i;
				break;
			}
		}
		// удаляем элемент по индексу
		if(index > -1)
		{
			T[] newData = new T[data.Length - 1];
			for (int i = 0, j = 0; i < data.Length; i++)
			{
				if (i == index) continue;
				newData[j] = data[i];
				j++;
			}
			data = newData;
		}
	}
	// получение элемента по индексу
	public T GetItem(int index)
	{
		if (index >-1 && index < data.Length)
		{
			return data[index];
		}
		else
			throw new IndexOutOfRangeException();
	}
	public int Count()
	{
		return data.Length;
	}
}

Пример применения:

Collection<int> numbers = new Collection<int>();
numbers.Add(1);
numbers.Add(3);
numbers.Add(5);

numbers.Remove(2); // попытка удалить элемента, которого нет в коллекции
numbers.Remove(3);


for (int i = 0; i < numbers.Count(); i++)
{
    Console.WriteLine(numbers.GetItem(i));
}
Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850