Как из списка 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); } }