Имейте в виду известную цитату:
«Умные структуры данных и тупой код работают намного лучше, чем наоборот».
- Эрик Рэймонд, Кафедральный собор и базар
Похоже, что цель в том, чтобы иметь возможность использовать простой и выразительный код (.Distinct()
) для сравнения ваших данных. В этом случае я бы рекомендовал перейти с простых массивов на более богатые объекты. Примерно так:
class Numbers
{
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
public int ThirdNumber { get; set; }
}
Тогда вы можете иметь массив этих объектов вместо массива массивов. Преимущество заключается в том, что вы можете наделить этот объект более богатой функциональностью. Такие как:
class Numbers : IEquatable<Numbers>
{
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
public int ThirdNumber { get; set; }
public bool Equals(Numbers other)
{
if (other == null)
return false;
return (
this.FirstNumber == other.FirstNumber &&
this.SecondNumber == other.SecondNumber &&
this.ThirdNumber == other.ThirdNumber
);
}
}
Теперь ваш умный тип данных может более эффективно использоваться более тупым кодом. (Просто ссылаясь на цитату, не думайте, что вы пишете тупой код или что-то в этом роде.) Как правило, это предпочтительнее, поскольку вам не нужно переписывать логику сравнения в нескольких места, если это нужно использовать в нескольких местах. Логика сравнения происходит внутри типа данных, а не в процедурном коде.
Обратите внимание, что это непроверенный и код от руки . Если я что-то пропустил в реализации, поправьте меня:)