在多个列表中找到最长字符串长度的更好方法

时间:2012-11-20 14:07:56

标签: c# linq list max nested-lists

我目前正在使用C#进行原型设计,因为这是它唯一有用的东西。 现在我正在学习linq并遇到了一个语法挑剔。

private List<string> svar1 = new List<string>();
private List<string> svar2 = new List<string>();
private List<string> svar3 = new List<string>();
private List<string> svar4 = new List<string>();
private List<string> svar5 = new List<string>();
... fill lists with data

要获得所有这些列表中最长的字符串长度,我会这样做:

List<List<string>> lists = new List<List<string>>{svar1, svar2, svar3, svar4, svar5};
int ma = lists.Max(lst => lst.Max(str => str.Length));

但似乎太长了。你不应该把它写得更短,也许更有效吗?

类似的东西:

int ma = {svar1, svar2, svar3, svar4, svar5}.Max(lst => lst.Max(str => str.Length));

我观看了有关此linq语法的视频,但很久以前我不记得语法了。稍后进行一些互联网搜索,我仍然无法找到一个好的答案。

更新:所有列表各有约870个项目。

2 个答案:

答案 0 :(得分:2)

你非常接近;

int ma = new[] {svar1, svar2, svar3, svar4, svar5}
             .Max(lst => lst.Max(str => str.Length));

应该有用。

答案 1 :(得分:1)

您可以使用Concat而不是创建新的List:

svar1.Concat(svar2).
   Concat(svar3).
   Concat(svar4).
   Max(str => str.Length);

如果你有很多短名单,这个解决方案可能会稍快一些。