2017-10-08 118 views
0

我想統計列表框中每個單詞的出現次數。
這是我的函數計算髮生統計c#窗體窗體列表框中每個單詞的出現次數

public int CountWords(ArrayList list, string item) 
{ 
    int count = 0; 
    foreach (string str in list) 
    { 
     if (item == str) 
      count++; 
    } 
    return count; 
} 

而這正是我使用CountWords - >

private void button4_Click(object sender, EventArgs e) 
{ 
    listBox3.Items.Clear(); 
    ArrayList arrList = new ArrayList(); 
    int count = 0; 
    foreach (object item in listBox2.Items) 
    { 
     arrList.Add(item); 
    } 

    foreach (string str in arrList) 
    { 
     count = obj.CountWords(arrList, str); 
     listBox3.Items.Add(str + ": " + count); 
    } 

} 

如果在列表框中我有這樣的價值觀:




結果是這樣的:
enter image description here

的計數是正確的,但我希望得到的結果是這樣的:
enter image description here

我應該怎麼添加或刪除代碼?
我會感謝任何形式的幫助:)

編輯
我不能夠使用COUNT()方法

+0

爲什麼要使用ArrayList的?爲什麼不是數組或列表? str.Distinct()ToList();應刪除重複項,但返回一個列表。 – 2017-10-08 13:12:03

回答

1

替換此

foreach (string str in arrList) 
     { 
      count = obj.CountWords(arrList, str); 
      listBox3.Items.Add(str + ": " + count); 
     } 

與此

foreach (string str in arrList) 
       { 
         string_Item=string.Concat(str,":",obj.CountWords(arrList, str)); 


        if (!listBox3.Items.Contains(_Item)) 
        { 
         listBox3.Items.Add(_Item); 
        } 
       } 
1

可以達到()的要求,很容易使用LINQ的GroupBy

private void button4_Click(object sender, EventArgs e) 
{ 
    listBox3.Items.Clear(); 
    var temp = listBox2.Items.Cast<string>().GroupBy(s => s); 
    foreach(var g in temp) 
     listBox3.Items.Add(g.Key + ": " + g.Count()); 
} 

版本不計數

private void button4_Click(object sender, EventArgs e) 
{ 
    listBox3.Items.Clear(); 
    var temp = listBox2.Items.Cast<string>().GroupBy(s => s); 
    foreach(var g in temp) 
    { 
     int count = 0; foreach(string s in g) count++; 
     listBox3.Items.Add(g.Key + ": " + count); 
    } 
} 
+0

這很好,但我忘了在帖子中寫我不能使用_Count()_方法。 – Sisi

+0

然後只需添加你的循環:int count = 0; foreach(string s in g)count ++; – Steve

0

您可以使用distinct

foreach (string str in arrList.Distinct()) 
2

你可以指望的項目只是這樣發生:

listBox2.DataSource = listBox1.Items.Cast<object>().GroupBy(x => x) 
           .Select(x => $"{x.Key}:{x.Count()}").ToList(); 
相關問題