Реализация компаратора для коллекции коллекций
У меня есть свой класс
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
вполне может зависеть от этого выбора.
Надеяться на то, что я говорю, имеет смысл.