public static void Main(string[] args) { List <TwoDPoint> points = new List <TwoDPoint>(100000); int[] hashOfPoints = new int[points.Capacity]; Random rn = new Random(); for (int i = 0; i < points.Capacity; i++) { TwoDPoint point = new TwoDPoint(0, 0); do { point.x = rn.Next(-100000, 100000); point.y = rn.Next(-100000, 100000); }while (points.Contains(point)); points.Add(point); hashOfPoints[i] = point.GetHashCode(); } for (int i = 0; i < hashOfPoints.Length - 1; i++) { for (int j = i + 1; j < hashOfPoints.Length; j++) { if (hashOfPoints[i] == hashOfPoints[j]) { for (int k = j + 1; k < hashOfPoints.Length; k++) { hashOfPoints[k - 1] = hashOfPoints[k]; } Array.Resize(ref hashOfPoints, hashOfPoints.Length - 1); j--; } } } TwoDPoint point1 = new TwoDPoint(10, 10); TwoDPoint point2 = new TwoDPoint(10, 10); if (point1.GetHashCode() == point2.GetHashCode()) { Console.WriteLine("У одинаковых точек хеш совпадает"); } else { Console.WriteLine("!!!У одинаковых точек хеш не совпадает"); } double accuracy = 100 * Convert.ToDouble(hashOfPoints.Length) / Convert.ToDouble(points.Capacity); Console.WriteLine($"Уникальность хеш-функции {accuracy}%"); }
public static void Demo(string[] args) { TwoDPoint point1 = new TwoDPoint(1, 10); TwoDPoint point2 = new TwoDPoint(1, 10); Console.WriteLine("Hash for point1: {0}\tHash for point2: {1}", point1.GetHashCode(), point2.GetHashCode()); TwoDPointWithHash newPoint1 = new TwoDPointWithHash(1, 10); TwoDPointWithHash newPoint2 = new TwoDPointWithHash(1, 10); Console.WriteLine("Hash for point1: {0}\tHash for point2: {1}", newPoint1.GetHashCode(), newPoint2.GetHashCode()); // уникальных точек будет 2, хотя координаты их одинаковы Console.WriteLine("TwoDPointWithHash:"); var twoDPointList = new List <TwoDPoint> { point1, point2 }; var distinctTwoDPointList = twoDPointList.Distinct(); foreach (var point in distinctTwoDPointList) { Console.WriteLine("Distinct point: {0}", point); } // одна уникальная точка Console.WriteLine("TwoDPointWithHash:"); var twoDPointWithHashList = new List <TwoDPointWithHash> { newPoint1, newPoint2 }; var distinctTwoDPointWithHashList = twoDPointWithHashList.Distinct(); foreach (var point in distinctTwoDPointWithHashList) { Console.WriteLine("Distinct point: {0}", point); } }