Имеется входной файл ~ 1млн строк, которые должны сортироваться по определенному принципу. На данный момент сортировка происходит следующим образом:
int wk;
while (Objects.Count() != 0)
{
SortRow.Add(Objects.ElementAt(0));
Objects.RemoveAt(0);
for (wk = 0; wk < Objects.Count(); wk++)
{
if (Objects.ElementAt(wk).F1 == SortRow.ElementAt(0).F1)
{
SortRow.Add(Objects.ElementAt(wk));
Objects.RemoveAt(wk);
wk--;
}
}
SortMas.Add(SortRow);
SortRow = new List<line>();
}
progressBar1.Maximum = SortMas.Count();
for (int i = 0; i < SortMas.Count(); i++)
{
for (int j = 1; j < SortMas[i].Count(); j++)
{
if (SortMas[i][j].F57 == 32 &&
(Convert.ToInt32(SortMas[i][j].F39) < Convert.ToInt32(SortMas[i][j - 1].F39)))
{
do
{
line a = SortMas[i][j];
SortMas[i][j] = SortMas[i][j - 1];
SortMas[i][j - 1] = a;
j--;
if (j == 0) break;
}
while ((Convert.ToInt32(SortMas[i][j].F39) < Convert.ToInt32(SortMas[i][j - 1].F39)));
}
if ((SortMas[i][j].F57 != 32) &&
(Convert.ToInt32(SortMas[i][j].F58) < Convert.ToInt32(SortMas[i][j - 1].F58))
&& SortMas[i][j - 1].F57 != 32)
{
do
{
line a = SortMas[i][j];
SortMas[i][j] = SortMas[i][j - 1];
SortMas[i][j - 1] = a;
j--;
if (j == 0) break;
}
while ((Convert.ToInt32(SortMas[i][j].F58) < Convert.ToInt32(SortMas[i][j - 1].F58)
&& SortMas[i][j - 1].F57 != 32));
}
}
}
Проблема в том, что сортировка происходит катастрофически медленно. Каким образом можно это дело оптимизировать?
Допустим у вас есть какой то тип:
public class MyType
{
public string F1 { get; }
public string F39 { get; }
public int F57 { get; }
public string F58 { get; }
}
как я понял SortMas у вас List<List<MyType>>
В таком случае вы можете написать свой IComparer
public class CustomComparer : IComparer<MyType>
{
public int Compare(MyType x, MyType y)
{
if (y.F57 == 32)
return int.Parse(x.F39).CompareTo(int.Parse(y.F39));
if(x.F57 != 32 && y.F57 != 32)
return int.Parse(x.F58).CompareTo(int.Parse(y.F58));
return 0;
}
}
И использовать стандартную сортировку, то есть часть под
progressBar1.Maximum = SortMas.Count();
Будет выглядеть так:
for (int i = 0; i < SortMas.Count; i++)
SortMas[i] = SortMas[i].OrderBy(x => x, new CustomComparer()).ToList();
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Необходимо парсить файл на ключевые словаКлючевых слов небольшое количество
Всем добрый день! НЕ принимается вот такой запрос, как я его не крутил и какие только варианты не использовалПри чём, проблема в первой части...
Имеется класс, реализующий паттерн Disposable:
ЗдравствуйтеНе получается задеплоить приложение на смартфон, Microsoft Lumia 640, Windows 10 Mobile, 10