61

リストのすべての要素の出現回数を C# の同じリストにカウントする簡単な方法はありますか?

このようなもの:

using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Linq;

string Occur;
List<string> Words = new List<string>();
List<string> Occurrences = new List<string>();

// ~170 elements added. . . 

for (int i = 0;i<Words.Count;i++){
    Words = Words.Distinct().ToList();
    for (int ii = 0;ii<Words.Count;ii++){Occur = new Regex(Words[ii]).Matches(Words[]).Count;}
         Occurrences.Add (Occur);
         Console.Write("{0} ({1}), ", Words[i], Occurrences[i]);
    }
}
4

6 に答える 6

110

このようなものはどうですか...

var l1 = new List<int>() { 1,2,3,4,5,2,2,2,4,4,4,1 };

var g = l1.GroupBy( i => i );

foreach( var grp in g )
{
  Console.WriteLine( "{0} {1}", grp.Key, grp.Count() );
}

コメントごとに編集:私はこの正義を試みます. :)

私の例ではFunc<int, TKey>、リストが int であるためです。つまり、GroupBy に項目をグループ化する方法を伝えています。Func は int を取り、グループ化のキーを返します。この場合、IGrouping<int,int>(int をキーとする int のグループ) を取得します。たとえば、これを ( ) に変更するとi => i.ToString()、グループ化を文字列でキー指定することになります。「1」、「2」、「3」でキーを設定するよりも些細な例を想像できます...おそらく、「1」、「2」、「3」をキーとして返す関数を作成します...

private string SampleMethod( int i )
{
  // magically return "One" if i == 1, "Two" if i == 2, etc.
}

つまり、これは int を取り、文字列を返す Func です。

i =>  // magically return "One" if i == 1, "Two" if i == 2, etc. 

しかし、元の質問では元のリスト値とそのカウントを知る必要があったため、整数を使用して整数のグループ化にキーを設定し、例を簡単にしました。

于 2009-07-16T17:51:33.807 に答える
22

このようなことをして、リストから数えることができます。

IList<String> names = new List<string>() { "ToString", "Format" };
IEnumerable<String> methodNames = typeof(String).GetMethods().Select(x => x.Name);

int count = methodNames.Where(x => names.Contains(x)).Count();

1 つの要素を数えるには

string occur = "Test1";
IList<String> words = new List<string>() {"Test1","Test2","Test3","Test1"};

int count = words.Where(x => x.Equals(occur)).Count();
于 2009-07-16T17:49:38.177 に答える
15
var wordCount =
    from word in words
    group word by word into g
    select new { g.Key, Count = g.Count() };    

これはlinqpadの例の1つから取られています

于 2009-07-16T17:55:54.793 に答える
-4

外側のループは、リスト内のすべての単語をループしています。それは不必要であり、問​​題を引き起こします。それを削除すると、正常に動作するはずです。

于 2009-07-16T17:48:25.747 に答える