Оптимизация выборки из List большого объема - C#

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

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

Всем добрый день! У меня есть список координат, где хранятся больше 100к записей. Я прохожу этот список двойным циклом для нахождения одинаковых записей, которые нужно подсчитать. Ниже привожу код, который я использую:
Листинг программы
  1. for (int i = 0; i < selectedPointsInBin.Count; i++)
  2. {
  3. double coordX = 0, coordY = 0;
  4. for (int j = 0; j < selectedPointsInBin.Count; j++)
  5. {
  6. if (selectedPointsInBin[i].PointX == selectedPointsInBin[j].PointX && selectedPointsInBin[i].PointY == selectedPointsInBin[j].PointY)
  7. {
  8. countPoints++;
  9. coordX = selectedPointsInBin[i].PointX;
  10. coordY = selectedPointsInBin[i].PointY;
  11. }
  12. }
  13. PointsSelectedObjects points = new PointsSelectedObjects(coordX, coordY, countPoints);
  14. countSelectedPointsInBin.Add(points);
  15. countPoints = 0;
  16. }
Можно ли как-нибудь это оптимизировать, а то когда там 100-200к записей цикл выполняется продолжительное время

Решение задачи: «Оптимизация выборки из List большого объема»

textual
Листинг программы
  1.            
  2.  
  3. static void Main(string[] args)
  4.         {
  5.             var rnd = new Random();
  6.  
  7.             //Генератор списка с 200 000 записями
  8.             var list = Enumerable.Range(0,200000).Select(e=>new Tuple<int, int>(rnd.Next(1000),rnd.Next(1000))).ToList();
  9.  
  10.             var dict = new SortedDictionary<string, int>();
  11.             foreach (var group in list)
  12.             {
  13.                 var hash = group.Item1.ToString() + ":" + group.Item2.ToString();
  14.                 if (!dict.Keys.Contains(hash)) dict[hash] = 1;
  15.                 else dict[hash] += 1;
  16.             }
  17.             var counts = dict.Select(_x =>
  18.                 {   var p = _x.Key.Split(':');
  19.                     return new { Key = new Tuple<int, int>(Int32.Parse(p[0]), Int32.Parse(p[1])), Count = _x.Value  };
  20.                 }).ToList();
  21.  
  22.             Console.WriteLine("Первые 20 записей");
  23.             for (var i = 0; i < 20; i++)
  24.             {
  25.                 Console.WriteLine(counts[i].Key.Item1 + " " + counts[i].Key.Item2 + " => " + counts[i].Count);
  26.             }
  27.             Console.ReadKey();
  28.          }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

15   голосов , оценка 4.267 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут