2

私は現在C#でプロトタイピングしています。それが、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個のアイテムがあります。

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 に答える