Как избавиться от хранения одинаковых копий векторов? - C#

Узнай цену своей работы

Формулировка задачи:

Доброго дня. Ломаю голову над следующей задачей: Избавиться от хранения одинаковых копий векторов. Для этого реализовать класс регистратор, хранящий ссылки на все имеющиеся векторы. Прямой вызов конструкторов векторов запретить, вместо этого реализовать метод CreateInstance, возвращающий новый вектор, если он уникален, и ссылку на имеющийся вектор в противном случае. Экземпляр класса-регистратора создавать в статическом конструкторе вектора. Будьте так любезны, подскажите пожалуйста, как можно решить данную задачу?

Решение задачи: «Как избавиться от хранения одинаковых копий векторов?»

textual
Листинг программы
    public class Vector<T>
    {
        public readonly T[] Items;
 
        internal Vector(params T[] items)
        {
            this.Items = items;
        }
 
        public Vector<T> Create(params T[] items)
        {
            return VectorCache<T>.Instance.GetOrCreate(items);
        }
 
        public override int GetHashCode()
        {
            var res = 0;
            foreach (var item in Items)
                res ^= item.GetHashCode();
 
            return res;
        }
 
        public override bool Equals(object obj)
        {
            var other = obj as Vector<T>;
            if (other == null) return false;
            if (other.Items.Length != Items.Length) return false;
            for (int i = 0; i < Items.Length; i++)
                if (!Items[i].Equals(other.Items[i]))
                    return false;
 
            return true;
        }
    }
 
    public class VectorCache<T>
    {
        public static VectorCache<T> Instance = new VectorCache<T>();
 
        private Dictionary<Vector<T>, Vector<T>> cache = new Dictionary<Vector<T>, Vector<T>>();
 
        public Vector<T> GetOrCreate(T[] items)
        {
            var res = new Vector<T>(items);
            if (cache.ContainsKey(res))
                return cache[res];
            return res;
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5
Похожие ответы