web-dev-qa-db-ja.com

文字列のリストで最も長い文字列を取得するためのLINQ関数はありますか?

これのためのLINQ関数はありますか、または次のように自分でコーディングする必要があります:

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

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

    return longest;
}
36
user1022677

これは、ループを1回繰り返すだけで実行できます。

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

これを使用できます:list.OrderByDescending(s => s.Length).First();

30
Dani
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();
7
ravy amiry

必要なメソッドは通常「MaxBy」と呼ばれ、残念ながら標準のシーケンス演算子のセットには含まれていません。幸い、自分で書くのはとても簡単です。実装については、この回答を参照してください:

Linq group by by a sub query

4
Eric Lippert

ラムダ式を使用して文字列のリストで最も長い文字列を取得するより良い方法があると思いました。そのような方法の1つは次のとおりです。

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

これが回答者に役立つことを願っています。

0