如何使用LINQ在字符串[]中找到最长的字符串

vrr*_*hod 19 c# linq-to-objects

我有一个可变长度的字符串数组.目前我有一个循环遍历数组以找到数组中最长的字符串.有没有什么方法可以使用LINQ以更高效和/或更清晰的方式编写它?

Bra*_*etz 43

它不会更有效率,但是做一些像以下事情会更清洁:

var strings = new string[] { "1", "02", "003", "0004", "00005" };

string longest = strings.OrderByDescending( s => s.Length ).First();
Run Code Online (Sandbox Code Playgroud)

输出:00005


Cal*_*olt 13

strings.Aggregate(string.Empty, (seed, f) => f.Length > seed.Length ? f : seed);
Run Code Online (Sandbox Code Playgroud)

聚合语法比其他方法稍微难以阅读,但严格来说,它比我在这里看到的其他方法更有效,因为它不需要排序.只是一个O(N)实现.

编辑:此方法与此处的大多数其他方法一起假设列表中没有空值,以免f.Length抛出空引用异常.一个快速的三元运算符(f!= null?f.Length:0)将修复它,如果它对你的可枚举有效.


age*_*t-j 9

string [] strings;
return strings.OrderByDescending (s => s.Length).First ();
Run Code Online (Sandbox Code Playgroud)