Есть ли функция LINQ для получения самой длинной строки в списке строк? - PullRequest
31 голосов
/ 02 ноября 2011

Существует ли функция LINQ для этого, или нужно было бы ее самостоятельно кодировать так:

static string GetLongestStringInList()
{
    string longest = list[0];

    foreach (string s in list)
    {
        if (s.Length > longest.Length)
        {
            longest = s;
        }
    }

    return longest;
}

Ответы [ 6 ]

82 голосов
/ 02 ноября 2011

Это будет сделано только с одной итерацией цикла:

list.Aggregate("", (max, cur) => max.Length > cur.Length ? max : cur);
25 голосов
/ 02 ноября 2011

Вы можете использовать это: list.OrderByDescending(s => s.Length).First();

5 голосов
/ 02 ноября 2011
var list = new List<string>(); // or string[] or any

list.Add("a");
list.Add("ccc");
list.Add("bb");
list.Add("eeeee");
list.Add("dddd");

// max-length
var length = list.Max(s => s.Length);

// biggest one
var biggest = list.FirstOrDefault(s => s.Length == length);

// if there is more that one by equal length
var biggestList = list.Where(s => s.Length == length);

// by ordering list
var biggest = list.OrderByDescending(s => s.Length).FirstOrDefault();

// biggest-list by LINQ
var bigList2 = from s in list where s.Length == list.Max(a => a.Length) select s;

// biggest by LINQ
var biggest2 = bigList2.FirstOrDefault();
4 голосов
/ 02 ноября 2011

Метод, который вы хотите, обычно называется «MaxBy», и, к сожалению, он не включен в стандартный набор операторов последовательности. К счастью, это очень легко написать самому. Посмотрите этот ответ для реализации:

Linq сгруппировать с подзапросом

0 голосов
/ 12 декабря 2016

Чтобы получить самую длинную строку в списке объекта / строки, попробуйте это:

List<String> list = new List<String>();
list.Add("HELLO");
list.Add("HELLO WORLD");
String maxString = list.OrderByDescending(x => x.Length).First();

Переменная maxString будет содержать значение "HELLO WORLD"

0 голосов
/ 02 ноября 2011

Добавьте ThenBy (), чтобы гарантировать возврат заказа, если есть несколько строк одинаковой длины

var longest = list.OrderByDescending(s => s.Length)
                   .ThenBy(s => s)
                   .FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...