我想计算列表框中每个单词的出现次数 这是我计算事件的函数
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()方法。
答案 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())