在不使用LINQ的情况下在arraylist中查找重复值

时间:2010-12-30 17:52:50

标签: c#-2.0 arraylist duplicates

我有一个没有重复项目的arraylist。我需要知道每个重复项目的数量。我使用2.0所以不能使用linq。

我之前发过一个类似的问题,但我的问题并不清楚。 谢谢 Prady

3 个答案:

答案 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;
    }