Как можно игнорировать / пропускать элементы n при сортировке строки в лексикографическом порядке - PullRequest
0 голосов
/ 25 июля 2011

У меня есть следующий код c #, который сортирует строку в лексикографическом (алфавитном) порядке.

string str = "ACGGACGAACT";</p>

<code>IEnumerable<string> sortedSubstrings =
                    Enumerable.Range(0, str.Length)
                    .Select(i => str.Substring(i))
                    .OrderBy(s => s);
</code>

Результат:
0 AACT
1 ACGAACT
2 ACGGACGAACT
3 ACT
4 CGAACT
5 CGGACGAACT
6 CT
7 GAACT
8 GACGAACT
9 GACGAACT
10 T

Однако я хочу улучшить эту сортировку, пропустив 3-й и 4-й символ в процессе лексикографической сортировки

В этом случае лексикографический вид будет отличаться от приведенного выше.

результат: 0 AA [CT
1 AC [T
2 AC [GG] ACGAACT
3AC [GA] ACT
4 CG [GA] CGAACT
5 CG [AA] CT
6 CT
7 GA [CG] AACT
8 GA [AC] T
9GG [AC] GAACT
10 T

как мне этого добиться?

Ответы [ 3 ]

2 голосов
/ 25 июля 2011

Это можно сделать, настроив лямбду, переданную на OrderBy. Примерно так должно это сделать:

var sortedSubstrings = 
    Enumerable.Range(0, str.Length)
    .Select(i => str.Substring(i))
    .OrderBy(s => s.Length < 3 ? s : s.Remove(2, Math.Min(s.Length - 2, 2)));

Редактировать: Исправлена ​​ошибка "по одному".

0 голосов
/ 25 июля 2011
var sorted = source.OrderBy(s => new string(s.Where((ch, n) => n != 2 && n != 3).ToArray()));
0 голосов
/ 25 июля 2011

Вы можете изменить лямбду, переданную на OrderBy, на ту, которая удалит 3-й и 4-й символы из строки.

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