Найти повторяющиеся значения в массиве без использования LINQ - PullRequest
0 голосов
/ 30 декабря 2010

У меня есть arraylist с несколькими дубликатами. Мне нужно знать количество каждого дублированного элемента. Я использую 2.0, поэтому не могу использовать linq.

Я уже публиковал подобный вопрос ранее, но мой вопрос не был ясен. Спасибо Пради

Ответы [ 3 ]

1 голос
/ 30 декабря 2010

Я сделал что-то в прошлом. Мое решение состояло в том, чтобы перебрать 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.

0 голосов
/ 30 декабря 2010

Мне давно нужно было нечто подобное для проекта, и я сделал для него функцию

    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;
    }
0 голосов
/ 30 декабря 2010

Вариант 1 : сортировка списка и подсчет смежных элементов Equal (требуется переопределить метод Equals для вашего класса)

Вариант 2 : используйте свой уникальный идентификатор (однако вы определяете два равных объекта) в качестве ключа для словаря и добавьте каждый из этих объектов в эту запись.

...