Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 2.0 不使用LINQ在arraylist中查找重复值_C# 2.0_Arraylist_Duplicates - Fatal编程技术网

C# 2.0 不使用LINQ在arraylist中查找重复值

C# 2.0 不使用LINQ在arraylist中查找重复值,c#-2.0,arraylist,duplicates,C# 2.0,Arraylist,Duplicates,我有一个arraylist,其中几乎没有重复项。我需要知道每件复制品的数量。我正在使用2.0,因此无法使用linq 早些时候,我发布了一个类似的问题,但我的问题并不清楚。 谢谢 Prady选项1:对列表进行排序,然后计算相邻相等的项(需要覆盖类的Equals方法) 选项2:使用您的唯一标识符(但是您定义两个对象相等)作为字典的键,并将每个对象添加到该条目中。我过去做过一些事情。我的解决方案是循环遍历ArrayList并将计数存储在字典中。然后循环浏览字典以显示结果: ArrayL

我有一个arraylist,其中几乎没有重复项。我需要知道每件复制品的数量。我正在使用2.0,因此无法使用linq

早些时候,我发布了一个类似的问题,但我的问题并不清楚。 谢谢
Prady

选项1:对列表进行排序,然后计算相邻相等的项(需要覆盖类的Equals方法)


选项2:使用您的唯一标识符(但是您定义两个对象相等)作为字典的键,并将每个对象添加到该条目中。

我过去做过一些事情。我的解决方案是循环遍历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);
        }
编辑
意识到我使用了var关键字,它不是2.0特性。用KeyValuePair替换了它。

很久以前,我在一个项目中需要类似的东西,并为此制作了一个函数

    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;
    }
静态字典GetDuplicates(ArrayList列表,out ArrayList uniqueList)
{
uniqueList=newarraylist();
Dictionary dups=新字典();
foreach(列表中的对象o)
{
if(唯一列表包含(o))
如果(!dups.ContainsKey(o))
重复添加(o,2);
其他的
dups[o]++;
其他的
唯一列表。添加(o);
}
返回DUP;
}

如果您正在使用2.0,为什么要将其标记为C#-3.0?抱歉,我正在更改它,您对此发表了评论为什么要在2.0中使用ArrayList?谢谢Chris。。。不过只有一个问题。。如果我知道键值,有没有办法知道计数的数量。例如,我想知道test的计数,使用类似find(test)的方法将返回3Yup。使用上面的代码。如果您想知道2的计数,只需执行类似“int count=itemCount[2]”的操作即可。
    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;
    }