интеллектуальная сортировка списка c # - PullRequest
1 голос
/ 09 августа 2011

мой код:

IEnumerable<Blob> bb = from element in bloblist
    let locationx = element.Rectangle.X
    let locationy = element.Rectangle.Y
    orderby locationy  ascending ,locationx  descending
    select element;
foreach (var b0 in bb)
{
    listBox1.Items.Add(b0.Rectangle.X + "    " + b0.Rectangle.Y);
}

это работает правильно, но моя цель:

1.порядок расположения по возрастанию, расположение по убыванию

2. если определение местоположения [i + 1] -locationy [i] <10 </p>

3.then: порядок по местоположениюx по убыванию, по местоположению по возрастанию

4.продолжить

пример:

Sorted(x,y)   Desired
---------    ---------
   x  y      x   y
   30 0      35  7
   35 7      30  0
   15 20     30  27
   25 25     25  25
   30 27     15  20

кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Очень сложно сказать, что вы пытаетесь сделать, но вы можете попытаться упростить вашу проблему в несколько разных этапов и связать их вместе:

IEnumerable<Blob> bb = 
from element in bloblist
where condition
orderby whatever
select element;

IEnumerable<Blob> bb2 =
from element in bb
where condition2
orderby whatever2
select element;

или даже:

IEnumerable<Blob> bb3 =
from element in bb.Concat(bb2)
where condition2
orderby whatever2
select element;

Я подозреваю, что всегда возможно упростить сложные критерии сортировки как композицию встроенных методов IEnumerable.

0 голосов
/ 10 августа 2011

Трудно точно сказать, о чем вы просите, но, похоже, это приведет вас к желаемому значению:

bloblist.Select(item => new { X = item.Rectangle.X, Y = item.Rectangle.Y })
        .OrderByDescending(item => item.X)
        .ToList()
        .ForEach(item =>
        {
            listBox1.Items.Add(item.X + " " + item.Y);
        });

Это должно дать вам набор (X, Y) пар, отсортированных по убыванию значения X.

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