2016-10-25 1 views
1

IEnumerable<string>があります。同じ文字で始まるすべてのエントリを収集したいと思います。たとえば
IEnumerable <string>のすべてのエントリが同じ文字で始まるLINQ

Hans 
Hannes 
Gustav 
Klaus 
Herbert 
Hanne 

は今、私は最初の2文字がHans, Hannes, Hanneを返すことになると同じであるすべてのエントリを検索します。

+0

可能な重複

はまた、あなたが持つかもしれない要件をフィルタリングするWhereを追加できます( "foo"で始まる文字列))]](@stackoverflow.com/questions/3916093/linq-wherex-x-containsstring-that-start-with-foo) – Steve

+0

これらの2文字がわかっている場合は、@ Steveコメントは、そうでなければ、あなたは 'GroupBy' /' ToLookup'を考慮する必要があります。ここで、キーは2の部分文字列です – Sehnsucht

+0

申し訳ありません私の質問があまりにも不明な場合、私はそれが知られていないので、リンクされた質問の重複だとは思わない。私は、どのくらいの文字(この場合は2つ)を検索したいのか分かります。 –

答えて

3

あなただけnを比較したい文字の数である.GroupBy

list.GroupBy(x=>x.Substring(0, n)).OrderByDescending(x=>x.Count()).First() 

を使用する必要があります。完全な例

list.GroupBy(x=>x.Substring(n)) 
    .Where(x=>x.Count() > 1) 
    .OrderByDescending(x=>x.Count()) 
    .First() 

:...ここで(X => x.Contains:[LINQの

 var lst = new string[] 
    { 
     "Hans", 
     "Hannes", 
     "Gustav", 
     "Klaus", 
     "Herbert", 
     "Hanne" 
    }; 
    var source = lst.GroupBy(x => x.Substring(0, 2)).OrderByDescending(x => x.Count()).First() 
    Console.WriteLine(source.Key); 
    Console.WriteLine(string.Join(",", source)); 
+0

私はポイントがいくつかのサンプルを与えることを知っているが、それはいくつかの悪い 'どこにここの例(私を打つことはありません)です。 'OrderByDescending'といくつかの' FirstOrDefault(x => x.Count()> 1) 'は同じことを行い、より明確になります – Sehnsucht

+0

私のサンプルデータであなたのソリューションを試してみると、空の' IEnumerable > '。パラメータが 'startIndex'であるため、' Substring'はここでは動作しません。 –

+0

固定部分文字列、最初に使用され、完全な例が追加されました – Cine

関連する問題