Сравнить два множества точек на эквивалентность - 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])};
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д