Коллекции объектов

This commit is contained in:
sqdselo 2024-03-17 23:37:52 +04:00
parent b32311652f
commit 7fe1682f7b
2 changed files with 152 additions and 0 deletions

View File

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HoistingCrane.CollectionGenericObjects
{
internal interface ICollectionGenericObjects<T>
where T : class
{
/// <summary>
/// Колличество объектов в коллекции
/// </summary>
int Count { get; }
/// <summary>
/// Максимальная вместимость коллекции("гаража")
/// </summary>
int SetMaxCount { set; }
/// <summary>
/// Добавление элемента в коллекцию на свободную позицию
/// </summary>
/// <param name="obj">Добавляемый объект</param>
/// <returns></returns>
bool Insert(T obj);
/// <summary>
/// Добавление элемента в коллекцию на конкретное место
/// </summary>
/// <param name="obj">Добовляемый объект</param>
/// <param name="pos">Позиция объекта</param>
/// <returns></returns>
bool Insert(T obj, int pos);
/// <summary>
/// Удаление конкретного элемента коллекции
/// </summary>
/// <param name="pos">Номер позиции</param>
/// <returns></returns>
bool Remove(int pos);
/// <summary>
/// Получение элемента коллекции по индексу
/// </summary>
/// <param name="pos">Индекс элемента</param>
/// <returns></returns>
T? Get(int pos);
}
}

View File

@ -0,0 +1,101 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HoistingCrane.CollectionGenericObjects
{
internal class MassivGenericObjects<T> : ICollectionGenericObjects<T>
where T : class
{
/// <summary>
/// Создание массива типа <T>
/// </summary>
private T[] array;
/// <summary>
/// Конструктор класса
/// </summary>
public MassivGenericObjects()
{
array = Array.Empty<T>();
}
/// <summary>
/// Кол-во элементов массива
/// </summary>
public int Count => array.Length;
public int SetMaxCount { set { if (value > 0) array = new T[value]; } }
public T? Get(int pos)
{
return array[pos];
}
/// <summary>
/// Вставка элемента в свободную позицию(с начала)
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public bool Insert(T obj)
{
for(int i = 0; i < Count; i++)
{
if (array[i] == null) return true;
}
return false;
}
/// <summary>
/// Вставка элемента в конкретную позицию
/// </summary>
/// <param name="obj"></param>
/// <param name="pos"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public bool Insert(T obj, int pos)
{
bool flag = false;
if (array[pos] == null)
{
array[pos] = obj;
return true;
}
if (array[pos] != null)
{
for(int i = pos; i < Count; i++)
{
if (array[i] == null)
{
flag = true;
array[i] = obj;
return true;
}
}
if(flag == false)
{
for(int i = pos; i > 0; i--)
{
if (array[i] == null)
{
array[i] = obj;
return true;
}
}
}
}
return false;
}
public bool Remove(int pos)
{
if (array[pos] != null)
{
return true;
}
return false;
}
}
}