Я должен быть в состоянии отсортировать список объектов, который может содержать дублон с определенными критериями.Пока код работает, но для 50 000 строк в моем списке требуется 10 минут.
Вот код:
public class TestObject
{
public string value1;
public string value2;
public string value3;
public string value4;
public int num1;
public int num2;
}
public static List<TestObject> ReturnTestObjectListWithoutDoubloon(List<TestObject> source)
{
var destination = new List<TestObject>();
var list = new Dictionary<int, TestObject>();
while (source.Count > 0)
{
list.Clear();
var originalElement = source[0];
foreach (var query in source.Select((element, index) => new { Value = element, Index = index })
.Where(currentElement => (currentElement.Value.value1 == originalElement.value1)
&& (currentElement.Value.value2 == originalElement.value2)
&& (currentElement.Value.value3 == originalElement.value3)
&& (currentElement.Value.value4 == originalElement.value4)))
{
list.Add(query.Index, query.Value);
}
if (list.Count > 1)
{
originalElement.num1 = list.Sum(a => a.Value.num1);
originalElement.num2 = list.Sum(a => a.Value.num2);
}
destination.Add(originalElement);
foreach (var positionToremove in list.Keys)
source.RemoveAt(positionToremove);
}
return destination;
}
Идея состоит в том, чтобы уменьшать список каждый раз, когда я передаюцикл while, так что мой запрос Linq выполняется в наименьшем возможном списке.Однако чем меньше у меня дублонов, тем медленнее.Я ищу решение, которое позволяет мне иметь наименьшее возможное количество рутним, память не является проблемой.
У кого-нибудь есть идея?