是否有一个LINQ函数可以获取字符串列表中最长的字符串?

mefy6pfw  于 2023-03-21  发布在  其他
关注(0)|答案(8)|浏览(144)

是否有LINQ函数可以实现这个函数,或者必须自己编写如下代码:

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

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

    return longest;
}
0wi1tuuw

0wi1tuuw1#

这只需要一次循环迭代:

list.Aggregate("", (max, cur) => max.Length > cur.Length ? max : cur);
kupeojn6

kupeojn62#

您可以使用以下命令:list.OrderByDescending(s => s.Length).First();

lndjwyie

lndjwyie3#

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();
nbnkbykc

nbnkbykc4#

你想要的方法通常被称为“MaxBy”,不幸的是它不包含在序列运算符的标准集合中。幸运的是,你自己编写它非常容易。请参阅下面的实现答案:
带子查询的Linq group by

lh80um4z

lh80um4z5#

我认为有一种更好的方法可以使用lambda表达式从字符串列表中获取最长的字符串,如下所示。

string longestString = list.Max(arr => arr);

希望这对寻求答案的人有好处。

l5tcr1uw

l5tcr1uw6#

要获取object/string列表中最长的字符串,请尝试以下操作:

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

变量maxString将包含值"HELLO WORLD"

3b6akqbq

3b6akqbq7#

最简单的方法是使用MaxBy,它从.Net6开始提供:
string longestString = list.MaxBy(x => x.Length);

yk9xbfzb

yk9xbfzb8#

添加ThenBy()以保证在存在多个相同长度的字符串时的返回顺序

var longest = list.OrderByDescending(s => s.Length)
                   .ThenBy(s => s)
                   .FirstOrDefault();

相关问题