Оптимизация выборки из List большого объема - C#
Формулировка задачи:
Всем добрый день! У меня есть список координат, где хранятся больше 100к записей. Я прохожу этот список двойным циклом для нахождения одинаковых записей, которые нужно подсчитать. Ниже привожу код, который я использую:
Можно ли как-нибудь это оптимизировать, а то когда там 100-200к записей цикл выполняется продолжительное время
for (int i = 0; i < selectedPointsInBin.Count; i++) { double coordX = 0, coordY = 0; for (int j = 0; j < selectedPointsInBin.Count; j++) { if (selectedPointsInBin[i].PointX == selectedPointsInBin[j].PointX && selectedPointsInBin[i].PointY == selectedPointsInBin[j].PointY) { countPoints++; coordX = selectedPointsInBin[i].PointX; coordY = selectedPointsInBin[i].PointY; } } PointsSelectedObjects points = new PointsSelectedObjects(coordX, coordY, countPoints); countSelectedPointsInBin.Add(points); countPoints = 0; }
Решение задачи: «Оптимизация выборки из List большого объема»
textual
Листинг программы
static void Main(string[] args) { var rnd = new Random(); //Генератор списка с 200 000 записями var list = Enumerable.Range(0,200000).Select(e=>new Tuple<int, int>(rnd.Next(1000),rnd.Next(1000))).ToList(); var dict = new SortedDictionary<string, int>(); foreach (var group in list) { var hash = group.Item1.ToString() + ":" + group.Item2.ToString(); if (!dict.Keys.Contains(hash)) dict[hash] = 1; else dict[hash] += 1; } var counts = dict.Select(_x => { var p = _x.Key.Split(':'); return new { Key = new Tuple<int, int>(Int32.Parse(p[0]), Int32.Parse(p[1])), Count = _x.Value }; }).ToList(); Console.WriteLine("Первые 20 записей"); for (var i = 0; i < 20; i++) { Console.WriteLine(counts[i].Key.Item1 + " " + counts[i].Key.Item2 + " => " + counts[i].Count); } Console.ReadKey(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д