diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/ICollectionGenericObjects.cs index faf079d..e8f7baa 100644 --- a/ProjectLiner/ProjectLiner/CollectionGenericObjects/ICollectionGenericObjects.cs +++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -21,16 +21,18 @@ /// Добавление объекта в коллекцию /// /// Добавляемый объект + /// /// Сравнение двух объектов /// true - вставка прошла удачно, false - вставка не удалась - int Insert(T obj); + int Insert(T obj, IEqualityComparer? comparer = null); /// /// Добавление объекта в коллекцию на конкретную позицию /// /// Добавляемый объект /// Позиция + /// /// Сравнение двух объектов /// true - вставка прошла удачно, false - вставка не удалась - int Insert(T obj, int position); + int Insert(T obj, int position, IEqualityComparer? comparer = null); /// /// Удаление объекта из коллекции с конкретной позиции @@ -56,5 +58,11 @@ /// /// Поэлементый вывод элементов коллекции IEnumerable GetItems(); + + /// + /// Сортировка коллекции + /// + /// + void CollectionSort(IComparer comparer); } } \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Drawnings/DrawningLinerEqutables.cs b/ProjectLiner/ProjectLiner/Drawnings/DrawningLinerEqutables.cs new file mode 100644 index 0000000..f1cbb56 --- /dev/null +++ b/ProjectLiner/ProjectLiner/Drawnings/DrawningLinerEqutables.cs @@ -0,0 +1,71 @@ +using ProjectLiner.Drawnings; +using ProjectLiner.Entities; +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +/// +/// Реализация сравнения двух объектов класса-прорисовки +/// +public class DrawningLinerEqutables : IEqualityComparer +{ + public bool Equals(DrawningCommonLiner x, DrawningCommonLiner? y) + { + if (x == null || x.EntityCommonLiner == null) + { + return false; + } + if (y == null || y.EntityCommonLiner == null) + { + return false; + } + if (x.GetType().Name != y.GetType().Name) + { + return false; + } + if (x.EntityCommonLiner.Speed != y.EntityCommonLiner.Speed) + { + return false; + } + if (x.EntityCommonLiner.Weight != y.EntityCommonLiner.Weight) + { + return false; + } + if (x.EntityCommonLiner.BodyColor != y.EntityCommonLiner.BodyColor) + { + return false; + } + if (x is DrawningLiner && y is DrawningLiner) + { + if (((EntityLiner)x.EntityCommonLiner).AdditionalColor != + ((EntityLiner)y.EntityCommonLiner).AdditionalColor) + { + return false; + } + if (((EntityLiner)x.EntityCommonLiner).Boats != + ((EntityLiner)y.EntityCommonLiner).Boats) + { + return false; + } + if (((EntityLiner)x.EntityCommonLiner).Anchor != + ((EntityLiner)y.EntityCommonLiner).Anchor) + { + return false; + } + if (((EntityLiner)x.EntityCommonLiner).Pipe != + ((EntityLiner)y.EntityCommonLiner).Pipe) + { + return false; + } + } + return true; + } + + public int GetHashCode([DisallowNull] DrawningCommonLiner obj) + { + return obj.GetHashCode(); + } +} \ No newline at end of file