Is there a LINQ
function for this is or would one have to code it themselves like this:
static string GetLongestStringInList()
{
string long
var list = new List<string>(); // or string[] or any
list.Add("a");
list.Add("ccc");
list.Add("bb");
list.Add("eeeee");
list.Add("ffffdd");
// 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();
To get the longest string in list of object/string try this:
List<String> list = new List<String>();
list.Add("HELLO");
list.Add("HELLO WORLD");
String maxString = list.OrderByDescending(x => x.Length).First();
The variable maxString
will contain the value "HELLO WORLD"
This will do it with only one loop iteration:
list.Aggregate("", (max, cur) => max.Length > cur.Length ? max : cur);
The method you want is typically called "MaxBy" and it is unfortunately not included in the standard set of sequence operators. Fortunately it is very easy to write yourself. See this answer for an implementation:
Linq group by with a sub query
You can use this: list.OrderByDescending(s => s.Length).First();
Add a ThenBy() to guarantee a return order if there are multiple strings with the same length
var longest = list.OrderByDescending(s => s.Length)
.ThenBy(s => s)
.FirstOrDefault();