Как из списка List выбрать все одинаковые значения? - C#

Узнай цену своей работы

Формулировка задачи:

Имеется очень большой список List примерно 50000 элементов, все элементы отсортированы по убыванию, нужно из списка вытащить самую длинную последовательность одинаковых элементов, затем вторую по величине и так до самой короткой, при этом LINQ использовать нельзя

Решение задачи: «Как из списка List выбрать все одинаковые значения?»

textual
Листинг программы
        class MyData : IComparable<MyData>
        {
            public MyData(int data, int count)
            {
                Data = data;
                Count = count;
            }
 
            public int Data { get; private set; }
            public int Count { get; private set; }
 
            public int CompareTo(MyData other)
            {
                if (Count.CompareTo(other.Count) != 0) 
                    return other.Count.CompareTo(Count);
                else 
                    return Data.CompareTo(other.Data);
            }
 
            public override string ToString()
            {
                return string.Format("Data: {0}, Count: {1}", Data, Count);
            }
        }
 
 
        private static void Main(string[] args)
        {
            // Подготовка исходных данных
            List<int> list = new List<int> {0, 1, 3, 5, 6, 5, 5, 1, 9, 8, 8, 9, 9, 9, 9, 9, 0};
            list.Sort((i1, i2) => i2.CompareTo(i1));
            //****
            List<MyData> lostData = new List<MyData>();
 
            int last = 0;
            for (int i = 0; i < list.Count; i++)
            {
                if (list[i] != list[last])
                {
                    lostData.Add(new MyData(list[last], i - last));
                    last = i;
                }
 
                if (i == list.Count - 1)
                {
                    lostData.Add(new MyData(list[last], list.Count - last));
                }
            }
 
            lostData.Sort();
            
            foreach (var myData in lostData)
            {
                Console.WriteLine(myData);
            }
        }

Оцени полезность:

13   голосов , оценка 3.538 из 5
Похожие ответы