Сравнить два множества точек на эквивалентность - 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])};
}
}
}
}