Сортировка List 2d точек - C#

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

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

Есть List из 2d точек, нужно отсортировать его так, чтобы возрастали х координаты при примерно одинаковых у координатах(с точностью 0.001). Затем у координаты увеличиваются и опять нужно отсортировать х координаты. Применить Linq
           points.OrderBy(p => p.y).ThenBy(p => p.x);
не получилось как мне кажется из за того что у координаты слегка могут отличаться. Такая функция(ниже) вроде как решает задачу. Вопрос, можно ли здесь применить Linq?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ListSort
{
    class Point
    {
        public double x, y;
        public Point(double x, double y)
        {
            this.x = x; this.y = y;
        }
    }
    class Program
    {
        static int ComparePoints(Point A, Point B)
        {
            int ires=0;
            if (A.y < B.y)
                ires = -1;
            if (A.y > B.y)
                ires = 1;
             if (A.y == B.y)
            {
                if (A.x < B.x)
                    ires = -1;
                if (A.x > B.x)
                    ires = 1;
            }
            return ires;
        }
        static void Main(string[] args)
        {
            List<Point> Points = new List<Point>();
             
            Points.Add(new Point(0,       0));
            Points.Add(new Point(23.6,    0));
            Points.Add(new Point(47.2,    0));
            Points.Add(new Point(70.8,    0));
            Points.Add(new Point(94.4,    0));
            Points.Add(new Point(118,     0));
            Points.Add(new Point(141.6,   0));
            Points.Add(new Point(35.4,    20.4382));
            Points.Add(new Point(59,      20.4382));
            Points.Add(new Point(82.6,    20.4382));
            Points.Add(new Point(106.2,   20.4382));
            Points.Add(new Point(129.8,   20.4382));
            Points.Add(new Point(153.4,   20.4382));
            Points.Add(new Point(70.8,    40.8764));
            Points.Add(new Point(94.4,    40.8764));
            Points.Add(new Point(118,     40.8764));
            Points.Add(new Point(141.6,   40.8764));
            Points.Add(new Point(106.2,   61.3146));
            Points.Add(new Point(129.8,   61.3146));
            Points.Add(new Point(47.2,    40.8764));
            Points.Add(new Point(59,      61.3146));
            Points.Add(new Point(70.8,    81.7528));
            Points.Add(new Point(82.5999, 102.1911));
            Points.Add(new Point(94.3999, 122.6293));
            Points.Add(new Point(82.6,    61.3146));
            Points.Add(new Point(94.4,    81.7528));
            Points.Add(new Point(106.1999,    102.1911));
            Points.Add(new Point(117.9999,    81.7529));
 
            Points.Sort(ComparePoints);
            int j = 1;
            foreach (Point i in Points)
            {
                Console.Write("{0}\t{1}\t{2}", j, i.x.ToString(),i.y.ToString());
                Console.WriteLine();
                j++;
            }
            Console.ReadKey();
        }
    }
}

Решение задачи: «Сортировка List 2d точек»

textual
Листинг программы
Points = Points.OrderBy(p => p.y, new MyComparer()).ThenBy(p => p.x).ToList();

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


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

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

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