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

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


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

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

12   голосов , оценка 3.75 из 5
Похожие ответы