Сортировка с подсчетом количества вхождений - C#
Формулировка задачи:
Добрый день всем. Подскажите решение по такой задаче: есть файл с более чем несколькими миллионами строк. Заносим это все дело в список и нужно посчитать повторение каждого элемента списка и отсортировать от наиболее повторяющихся к наименее повторяющимся.
Пример:
Исходные строки:
строка1
строка2
строка2
стркоа3
строка4
строка4
Необходимо получить нечто вроде такоего:
строка4:2
строка2:2
строка3:1
строка1:1
Тут вродебы ничего сложного, алгоритмы еще в школе учили, но это хорошо когда мало элементов, а если в списке пару миллионов строк то сравнить каждую с каждой и подсчитать количество повторений затягивается на часы.
Посоветуйте как эту задачу можно решить? Заранее благодарен.
Решение задачи: «Сортировка с подсчетом количества вхождений»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace linqDistinct
{
class Program
{
static void Main(string[] args)
{
string[] array = new string[] { "строка1", "строка2", "строка2", "строка2", "стркоа3", "строка4", "строка4" };
//linq :D
var tmpArray = (from p in array
group p by p into value
select new { value = value.Key, count = value.Count() }).ToArray();
foreach (var item in tmpArray.OrderByDescending( m => m.count ))
{
Console.WriteLine(item.value+": "+item.count);
}
Console.ReadLine();
}
}
}