HashSetまたはDictionaryを使用して(特定の順序で保持する必要がある場合)、それらが本当に一意であることを確認することをお勧めします。
次に、 GetHashCodeとEqualsをオーバーライドして、等しいかどうかを確認する必要があります。
GetHashCodeのベストプラクティス:オーバーライドされたSystem.Object.GetHashCodeの最良のアルゴリズムは何ですか?
実装
public class Coordinate
{
public Int32 X { get; set; }
public Int32 Y { get; set; }
public override int GetHashCode()
{
Int32 hash = 17;
hash = hash * 23 + X;
hash = hash * 23 + Y;
return hash;
}
public override Boolean Equals(object obj)
{
Coordinate other = obj as Coordinate;
if (other != null)
{
return (other.X == X) && (other.Y == Y);
}
return false;
}
}
辞書
Int32 count = 0;
Dictionary<Coordinate, Int32> cords = new Dictionary<Coordinate, Int32>();
// TODO : You need to check if the coordinate exists before adding it
cords.Add(new Coordinate() { X = 10, Y = 20 }, count++);
// To get the coordinates in the right order
var sortedOutput = cords.OrderBy(p => p.Value).Select(p => p.Key);
HashSet
HashSet<Coordinate> cords = new HashSet<Coordinate>();
cords.Add(new Coordinate() { X = 10, Y = 20 });