Сортировать список в произвольном порядке в C#

#c#

#c#

Вопрос:

Мне нужно отсортировать список в этом порядке M, T, W, R, F, S, N.

Пн-Пн, Вт -Вт. W- Ср, R- четверг, F-пятница, S-сб. и N-Вс.

Мой список может быть в случайном порядке W, M, F, T и т.д. Как мне отсортировать его как M, W, T, F? Любой эффективный способ сделать это?

Комментарии:

1. можете ли вы поделиться своими входными данными, выходными данными и структурами данных?

2. Например, мой входной список — T, M, F, а выходные данные должны быть M, T, F. (понедельник, вторник, пятница). Я бы хотел, чтобы список входных данных был отсортирован в моем пользовательском порядке: M, T, W, R, F, S, R.

3. это строки или что-то еще?

4. только строки. Спасибо.

Ответ №1:

Создайте и используйте пользовательский компаратор.

 var items = new string[] { "W", "M", "F", "T" };

Array.Sort(items, Comparer<string>.Create(
    (x, y) =>
    {
        var keys = "MTWRFSN";
        return keys.IndexOf(x).CompareTo(keys.IndexOf(y));
    }));

Console.WriteLine(string.Join(", ", items));
  

Тот же пример со списком вместо массива:

 var items = new List<string> { "W", "M", "F", "T" };

items.Sort(Comparer<string>.Create(
    (x, y) =>
    {
        var keys = "MTWRFSN";
        return keys.IndexOf(x).CompareTo(keys.IndexOf(y));
    }));

Console.WriteLine(string.Join(", ", items));