Реализация компаратора для коллекции коллекций

У меня есть свой класс

MyClass<MyTriple<FirstG, SecondG, ThirdG>> : ICollection<MyTriple<FirstG, SecondG, ThirdG>>

У меня есть данные, хранящиеся в:

Dictionary<FirstG, Dictionary<SecondG, ThirdG>> Data

и я хочу реализовать IEqualityComparer для моих данных. Конструктор MyClass должен принимать в качестве аргумента для сравнения MyTriple:

public MyClass(IEqualityComparer<MyTriple<FirstG, SecondG, ThirdG>> comparer) {...}

и я хочу (как-то) передать этот компаратор Data и создать его в конструкторе, как:

Data = new Dictionary<FirstG, new Dictionary<SecondG, ThirdG>(SecondAndThirdGComparer)>(FirstGComparer);

Я действительно безнадежен, я пытался создать свой компаратор, который реализует IEqualityComparer, но я не могу понять, как получить FirstGComparer<FirstG> Comparer. Спасибо за любые советы.

1 ответ

Решение

Итак, пользователь приходит с comparer параметр (конструктору) типа:

IEqualityComparer<MyTriple<FirstG, SecondG, ThirdG>>

Теперь это может быть любой сумасшедший компаратор в "3D". Никто не может гарантировать, что это comparer работает координатно или лексикографически. Поэтому нет абсолютно никакого способа, которым вы можете "выделить" компаратор только FirstG, например.

Предположим, у вас есть два экземпляра firstG_X а также firstG_Y, сказать. Тогда из comparer Вы не можете сказать, равны ли эти два. Вы можете спросить comparer сравнить только две тройки. Если вы "продлите" firstG_X в какой-то тройке, и firstG_Y к какой-то другой тройке, вы должны сделать произвольный выбор, и ответ от оракула comparer вполне может зависеть от этого выбора.

Надеяться на то, что я говорю, имеет смысл.

Другие вопросы по тегам