Как отсортировать список строк по нескольким условиям - PullRequest
1 голос
/ 18 февраля 2020

У меня есть список строк, который выглядит следующим образом (полностью несортированный):

[Title b] \t [text] \t complete
[Title a] \t [text] \t incomplete
[Title a] \t [text] \t complete
[Title c] \t [text] \t complete
...

Он должен быть отсортирован так, чтобы он выглядел либо так:

[Title a] \t [text] \t complete
[Title a] \t [text] \t incomplete
[Title b] \t [text] \t complete
[Title c] \t [text] \t complete
...

Или вот это (которое способ сортировки выбирается)

[Title a] \t [text] \t complete
[Title j] \t [text] \t complete
[Title s] \t [text] \t complete
...

[Title b] \t [text] \t incomplete
...

Мой подход ко всей этой сортировке довольно грязный и совсем не гладкий, а также решает только второй способ сортировки.

List<string> sortedTps = new List<string>();
List<string> completeTps = new List<string>();
List<string> incompleteTps = new List<string>();
List<string> errorTps = new List<string>();

foreach (string tp in tpByProduct)
{
    if (tp.Contains("\t complete"))
    {
        completeTps.Add(tp);
    }
    else if (tp.Contains("\t incomplete"))
    {
        incompleteTps.Add(tp);
    }
 }

 completeTps.Sort();
 incompleteTps.Sort();

 foreach(string tp in completeTps)
 {
    sortedTps.Add(tp);
 }

 foreach(string tp in incompleteTps)
 {
    sortedTps.Add(tp);
 }

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

1 Ответ

3 голосов
/ 18 февраля 2020

Код, который вы опубликовали, может быть выполнен с помощью LINQ:

var sortedTps = tpByProduct.OrderBy(x => x.Contains("\t complete")).ThenBy(x => x).ToList();

Сначала он будет сортировать после того, содержит ли строка «\ t complete», затем он будет сортировать после самой строки. В итоге отсортированный результат копируется в новый список.

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