我有一个没有重复项目的arraylist。我需要知道每个重复项目的数量。我使用2.0所以不能使用linq。
我之前发过一个类似的问题,但我的问题并不清楚。 谢谢 Prady
答案 0 :(得分:1)
我过去做过一些事情。我的解决方案是遍历ArrayList并将计数存储在字典中。然后循环通过字典来显示结果:
ArrayList list = new ArrayList();
list.Add(1);
list.Add("test");
list.Add("test");
list.Add("test");
list.Add(2);
list.Add(3);
list.Add(2);
Dictionary<Object, int> itemCount = new Dictionary<object, int>();
foreach (object o in list)
{
if (itemCount.ContainsKey(o))
itemCount[o]++;
else
itemCount.Add(o, 1);
}
foreach (KeyValuePair<Object, int> item in itemCount)
{
if (item.Value > 1)
Console.WriteLine(item.Key + " count: " + item.Value);
}
输出:
test count: 3
2 count: 2
修改强> 实现我使用的var关键字不是2.0特性。用KeyValuePair替换它。
答案 1 :(得分:0)
选项1 :对列表进行排序,然后相邻计算相等的项目(要求您覆盖类的等于方法)
选项2 :使用您的唯一标识符(但是您将两个对象定义为相同)作为Dictionary的键并将每个对象添加到该条目。
答案 2 :(得分:0)
我很久以前就需要类似的项目,并为它做了一个功能
static Dictionary<object, int> GetDuplicates(ArrayList list, out ArrayList uniqueList)
{
uniqueList = new ArrayList();
Dictionary<object, int> dups = new Dictionary<object, int>();
foreach (object o in list)
{
if (uniqueList.Contains(o))
if (!dups.ContainsKey(o))
dups.Add(o, 2);
else
dups[o]++;
else
uniqueList.Add(o);
}
return dups;
}