Сортировка List 2d точек - C#
Формулировка задачи:
Есть List из 2d точек, нужно отсортировать его так, чтобы возрастали х координаты при примерно одинаковых у координатах(с точностью 0.001). Затем у координаты увеличиваются и опять нужно отсортировать х координаты.
Применить Linq
не получилось как мне кажется из за того что у координаты слегка могут отличаться.
Такая функция(ниже) вроде как решает задачу.
Вопрос, можно ли здесь применить Linq?
Листинг программы
- points.OrderBy(p => p.y).ThenBy(p => p.x);
Листинг программы
- 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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д