C # - сортировка строк по другой строке в качестве помощника - PullRequest
6 голосов
/ 16 ноября 2011

Есть ли встроенный метод .NET, который решил бы мой сценарий?

  1. Получил массив строк ex. { "Mark", "Tom", "Mat", "Mary", "Peter" }
  2. Я использую строку "Ma" в качестве помощника для сортировки строк
  3. Результат моего массива { "Mark", "Mary", "Mat", "Tom", "Peter" }

Я знаю, что решить эту функцию было бы легко, но мне интересно, существует ли такой метод.

PS. Использование .NET 4.0

Ответы [ 2 ]

17 голосов
/ 16 ноября 2011

Используя .Net 3.5 (и выше) методы OrderByDescending и ThenBy в Linq смогут делать то, что вы хотите.например:

var ordered = strings.OrderByDescending(s => s.StartsWith("Ma")).ThenBy(s => s);
1 голос
/ 16 ноября 2011

Я думаю, что этот метод не существует.
Я решил с этим:

public static string[] Sort(this string[] list, string start)
{
    List<string> l = new List<string>();
    l.AddRange(list.Where(p => p.StartsWith(start)).OrderBy(p => p));
    l.AddRange(list.Where(p => !p.StartsWith(start)).OrderBy(p => p));
    return l.ToArray();
}

Так что вы можете сделать

string[] list = new string[] { "Mark", "Tom", "Mat", "Mary", "Peter" };
string[] ordered_list = list.Sort("Ma");

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

public static string[] Sort(this string[] list, string start)
{
    List<string> l = new List<string>();
    l.AddRange(list.Where(p => p.StartsWith(start)).OrderBy(p => p));
    l.AddRange(list.Where(p => !p.StartsWith(start)));
    // l.AddRange(list.Where(p => !p.StartsWith(start)).OrderByDescending(p => p));
    return l.ToArray();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...