Сравнить два множества точек на эквивалентность - C#
Формулировка задачи:
Имеется информация о двух множествах точек, каждая точка представляет из себя следующее: номер точки (целое значение), координата x, координата y. Задача состоит в том, что эти два множества нужно сравнить на эквивалентность. Точки считаются эквивалентными, если равны их номера и координаты, а множества эквивалентны, если равны все точки с одинаковыми номерами. Информация содержится в 2 текстовых файлах, причем точки могут идти в произвольном порядке в обоих файлах. Какое средство c# лучше использовать для сравнения? Есть идея создать класс, с полями, содержащими каждую точку и реализовать там интерфейс ICompareble, после чего можно будет создать массив точек, отсортировать его по номеру точек и сравнить. Также есть идея использовать класс Dictionary, с помощью которого это вполне можно сделать, но я пока не знаю, как лучше. Оба предложенных способа, возможно, достаточно медленны, и хотелось бы услышать Ваше мнение. Заранее спасибо.
На всякий случай добавлю (может это не понятно из написанного): в каждом файле - одно множество.
Решение задачи: «Сравнить два множества точек на эквивалентность»
textual
Листинг программы
using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace ConsoleApplication198 { class Program { static void Main(string[] args) { var fileName1 = "c:\\1.txt"; var fileName2 = "c:\\2.txt"; //создаем два файла File.WriteAllText(fileName1, @"0 23 24 1 34 56 3 56 78 4 23 56"); File.WriteAllText(fileName2, @"3 16 78 1 34 56 4 23 56 0 23 24"); //читаем файлы в HashSet var hash1 = ReadHashSet(fileName1); var hash2 = ReadHashSet(fileName2); //сравниваем на совпадение var res = hash1.SetEquals(hash2); //выводим результат Console.WriteLine(res); Console.ReadLine(); } private static HashSet<NumPoint> ReadHashSet(string fileName) { var hash = new HashSet<NumPoint>(); foreach (var line in File.ReadAllLines(fileName).Select(l => l.Trim()).Where(l=>l != "")) hash.Add(NumPoint.Parse(line)); return hash; } struct NumPoint { public int Id; public int X; public int Y; public static NumPoint Parse(string line) { var parts = line.Split(' '); return new NumPoint {Id = int.Parse(parts[0]), X = int.Parse(parts[1]), Y = int.Parse(parts[2])}; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д