2

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

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 个项目。

4

2 回答 2

2

你很亲近;

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

应该管用。

于 2012-11-20T14:09:27.330 回答
1

您可以使用 Concat 而不是创建新列表:

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

如果您有许多短名单,此解决方案可能会稍微快一些。

于 2012-11-20T15:03:29.717 回答