计算c#windows窗体列表框

时间:2017-10-08 13:05:26

标签: c# .net winforms listbox

我想计算列表框中每个单词的出现次数 这是我计算事件的函数

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()方法。

4 个答案:

答案 0 :(得分:2)

您可以通过以下方式计算项目的出现次数:

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

答案 1 :(得分: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());
} 

没有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);
    }
} 

答案 2 :(得分: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);
                    }
                }

答案 3 :(得分:0)

您可以使用Distinct

foreach (string str in arrList.Distinct())