Как отсортировать координаты хэша в C # - PullRequest
2 голосов
/ 07 мая 2019

enter image description here

Я сохраняю значения координат в HashSet.

И я хочу отсортировать его по порядку на картинке выше.

Ниже приведена типичная точечная структура с использованием Hashset.

struct Point
{
    public int x, y;
    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

private HashSet<Point> hashset = new HashSet<Point>();

Я нашел источник, который просто сортирует одно значение.

Однако я не нашел источника, который сортирует два или значения координат.

Приведите пример сортировки координат.

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Вы можете использовать пользовательский компаратор для достижения того, что вы хотите, где вы можете определить свои собственные правила:

var comparer = Comparer<Point>.Create((p1, p2) =>
{
    if (p1.y < p2.y)
    {
       return p1.x > p2.x ? 1 : -1;
    } 
    else
    {
       return p1.x < p2.x ? 1 : -1;
    }
});

hashset.OrderBy(p => p, comparer)

PS Не на 100% уверен, что все условия верны, но вы поняли идею, я надеюсь, так что вы можете написать желаемую логику, следуя этому примеру.

1 голос
/ 07 мая 2019
points.OrderBy(p => Math.Atan2(p.y, p.x))

должен сделать свое дело.

Он упорядочит точки по их направлению, измеренному от начала координат (то есть начиная с "запада" по часовой стрелке)

Если вы хотите сохранить этот порядок в структуре, основанной на множестве, вам нужно подумать еще раз, потому что HashSet<T> не имеет неявного упорядочения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...