统计c#窗体窗体列表框中每个单词的出现次数
问题描述:
我想统计列表框中每个单词的出现次数。
这是我的函数计算发生统计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);
}
}
我应该怎么添加或删除代码?
我会感谢任何形式的帮助:)
编辑:
我不能够使用COUNT()方法。
答
替换此
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);
}
}
答
可以达到()的要求,很容易使用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);
}
}
答
您可以使用distinct
foreach (string str in arrList.Distinct())
答
你可以指望的项目只是这样发生:
listBox2.DataSource = listBox1.Items.Cast<object>().GroupBy(x => x)
.Select(x => $"{x.Key}:{x.Count()}").ToList();
为什么要使用ArrayList的?为什么不是数组或列表? str.Distinct()ToList();应删除重复项,但返回一个列表。 – 2017-10-08 13:12:03