Сравнить два множества точек на эквивалентность - C#

Узнай цену своей работы

Формулировка задачи:

Имеется информация о двух множествах точек, каждая точка представляет из себя следующее: номер точки (целое значение), координата x, координата y. Задача состоит в том, что эти два множества нужно сравнить на эквивалентность. Точки считаются эквивалентными, если равны их номера и координаты, а множества эквивалентны, если равны все точки с одинаковыми номерами. Информация содержится в 2 текстовых файлах, причем точки могут идти в произвольном порядке в обоих файлах. Какое средство c# лучше использовать для сравнения? Есть идея создать класс, с полями, содержащими каждую точку и реализовать там интерфейс ICompareble, после чего можно будет создать массив точек, отсортировать его по номеру точек и сравнить. Также есть идея использовать класс Dictionary, с помощью которого это вполне можно сделать, но я пока не знаю, как лучше. Оба предложенных способа, возможно, достаточно медленны, и хотелось бы услышать Ваше мнение. Заранее спасибо.
На всякий случай добавлю (может это не понятно из написанного): в каждом файле - одно множество.

Решение задачи: «Сравнить два множества точек на эквивалентность»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5.  
  6. namespace ConsoleApplication198
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             var fileName1 = "c:\\1.txt";
  13.             var fileName2 = "c:\\2.txt";
  14.  
  15.             //создаем два файла
  16.             File.WriteAllText(fileName1, @"0 23 24
  17. 1 34 56
  18. 3 56 78
  19. 4 23 56");
  20.  
  21.             File.WriteAllText(fileName2, @"3 16 78
  22. 1 34 56
  23. 4 23 56
  24. 0 23 24");
  25.             //читаем файлы в HashSet
  26.             var hash1 = ReadHashSet(fileName1);
  27.             var hash2 = ReadHashSet(fileName2);
  28.  
  29.             //сравниваем на совпадение
  30.             var res = hash1.SetEquals(hash2);
  31.  
  32.             //выводим результат
  33.             Console.WriteLine(res);
  34.             Console.ReadLine();
  35.         }
  36.  
  37.         private static HashSet<NumPoint> ReadHashSet(string fileName)
  38.         {
  39.             var hash = new HashSet<NumPoint>();
  40.  
  41.             foreach (var line in File.ReadAllLines(fileName).Select(l => l.Trim()).Where(l=>l != ""))
  42.                 hash.Add(NumPoint.Parse(line));
  43.  
  44.             return hash;
  45.         }
  46.  
  47.         struct NumPoint
  48.         {
  49.             public int Id;
  50.             public int X;
  51.             public int Y;
  52.  
  53.             public static NumPoint Parse(string line)
  54.             {
  55.                 var parts = line.Split(' ');
  56.                 return new NumPoint {Id = int.Parse(parts[0]), X = int.Parse(parts[1]), Y = int.Parse(parts[2])};
  57.             }
  58.         }
  59.     }
  60. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы