1


0

リスト内の類似単語を数える方法は?

私はすべての個々の類似した単語をカウントしたい類似した名前のC#リストを持っています。

リストにこれらの値があるとします

one,one,one,two,two,four,four,four

それから私はこのように計算したい

one 3
two 2
four 3

リストからこのような値を計算するにはどうすればよいですか?

4 Answer


9


文字列をコンマで分割し、すべての結果をループして、各単語をハッシュテーブルまたは値1の辞書に追加します。 単語(キー)が既に存在する場合、値を増やします。

string[] values = "one,one,one,two,two,four,four,four".Split(',');
var counts = new Dictionary();

foreach (string value in values) {
    if (counts.ContainsKey(value))
        counts[value] = counts[value] + 1;
    else
        counts.Add(value, 1);
}

または、必要に応じて、ここにLINQソリューションがあります

var counts = values.GroupBy(k => k, e => 1)
   .Select(f => new KeyValuePair(f.Key, f.Sum()))
   .ToDictionary(k => k.Key, e => e.Value);


7


Linqに基づくソリューションは次のとおりです。

    string s = "one,one,one,two,two,four,four,four";
    List list = s.Split(',').ToList();

    Dictionary dictionary = list.GroupBy(x => x)
        .ToDictionary(x => x.Key, x => x.Count());

    foreach (var kvp in dictionary)
        Console.WriteLine("{0}: {1}", kvp.Key, kvp.Value);

出力:

one: 3
two: 2
four: 3

このソリューションは、共通の値が連続しているという事実を利用していません。 これが常に当てはまる場合、少し高速なソリューションを作成できますが、これは短いリストやアイテムが任意の順序で届く場合に適しています。


0


Dictionaty listCount = new Dictionaty();
for (int i = 0; i < yourList.Count; i++)
{
 if(listCount.ContainsKey(yourList[i]))
  listCount[yourList[i].Trim()] = listCount[yourList[i].Trim()] + 1;
 else
  listCount[yourList[i].Trim()] = 1;
}


0


リストの場合、次のことを実行できます(テストなし)。

List list = new List()
  {
    "One",
    "One",
    "Two",
    // etc
  }

Dictionary d = new Dictionary();

foreach (string s in list)
{
  if (d.ContainsKey(s))
    d.Add(s, 1);
  else
    d[s]++;
}

推奨される(よりクリーンな)方法は、LinqでGroupByとCountを使用してこれを行うことですが、現時点では構文を入力するタイプがありません。

がんばろう!