我正在使用动态int泛型List。我试图添加,然后按降序排序列表。此操作发生多个时间。 目前我正在使用Linq这样做。
QLineEdit
是否有某种方法可以提高整体操作的性能。
答案 0 :(得分:1)
您当前的方法次优,因为每次添加元素时,您都会再次对整个列表进行排序,这是可以避免的,并且每次向整个列表添加整数时都会构建一个新的列表。 List<int>
再次可以避免。
因为你已经有List<int>
我使用属于这个类的方法而不是使用LINQ来避免开销。
我的建议是创建一个扩展方法:
public static class Extensions {
public static void InsertElementDescending(this List<int> source,
int element)
{
int index = source.FindLastIndex(e => e > element);
if (index == 0 || index == -1)
{
source.Insert(0, element);
return;
}
source.Insert(index + 1, element);
}
}
然后用例将是:
List<int> list = new List<int>();
list.InsertElementDescending(1);
list.InsertElementDescending(2);
list.InsertElementDescending(233);
list.InsertElementDescending(0);
list.InsertElementDescending(-2);
列表现在将按降序排列元素。
总体而言,这比目前的方法具有更好的性能。
答案 1 :(得分:1)
您的方法确实有很多开销,因为每次插入都会创建一个新的List<T>
。
您可以通过排序来加快速度。考虑在原始预排序列表的后面添加项目之后,您需要做的就是将该项目移回,直到您点击的项目大于新插入的项目。你可以这样做:
static void InsertSorted<T>(IList<T> list, T item) where T : IComparable<T> {
list.Add(item);
var i = list.Count-1;
for ( ; i > 0 && list[i-1].CompareTo(item) < 0 ; i--) {
list[i] = list[i-1];
}
list[i] = item;
}