Ответ 1
Это будет сделано только с одной итерацией цикла:
list.Aggregate("", (max, cur) => max.Length > cur.Length ? max : cur);
Есть ли функция LINQ
для этого, или она сама должна была бы сама ее кодировать следующим образом:
static string GetLongestStringInList()
{
string longest = list[0];
foreach (string s in list)
{
if (s.Length > longest.Length)
{
longest = s;
}
}
return longest;
}
Это будет сделано только с одной итерацией цикла:
list.Aggregate("", (max, cur) => max.Length > cur.Length ? max : cur);
Вы можете использовать это: list.OrderByDescending(s => s.Length).First();
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();
Метод, который вы хотите, обычно называется "MaxBy", и, к сожалению, он не включен в стандартный набор операторов последовательности. К счастью, очень легко написать себя. См. Этот ответ для реализации:
Может ли Simlpy использовать функцию LINQ 'Max()' и передать лямбда-выражение
list.Max(x => x.Length);
или же
(from x in list select x.Length).Max();
В VB.NET это:
list.Max(Function(x) x.Length)
или же
(From x In stringList Select x.Length).Max
Эти методы имеют одинаковую производительность выбранного ответа, но они короче и их легче читать...
Я думал, что есть лучший способ получить самую длинную строку в списке строк, используя лямбда-выражения. Один из таких способов, как показано ниже.
string longestString = list.Max(arr => arr);
Надеюсь, что это хорошо работает для ищущих ответа.
Добавьте ThenBy(), чтобы гарантировать обратный порядок, если существует несколько строк с одинаковой длиной
var longest = list.OrderByDescending(s => s.Length)
.ThenBy(s => s)
.FirstOrDefault();
Чтобы получить самую длинную строку в списке объекта/строки, попробуйте это:
List<String> list = new List<String>();
list.Add("HELLO");
list.Add("HELLO WORLD");
String maxString = list.OrderByDescending(x => x.Length).First();
Переменная maxString
будет содержать значение "HELLO WORLD"