Ste*_*eve 1 c# wpf performance
我有ViewModel类如下:
public class ListViewModel
{
public ObservableCollection<InfoItem> List { get; set; }
}
public interface InfoItem
{
int Reference { get; }
string Name { get; }
}
Run Code Online (Sandbox Code Playgroud)
该集合按名称排序,该名称将显示在UI中.我有一个场景,其中集合包含几千个项目,我在集合中添加了一个新项目.
按名称重新排序我的集合的最有效方法是什么,以便新项目出现在列表中的正确位置?
如果您的集合已经排序,则对其执行二进制搜索以找出应插入新项目的位置,然后调用Insert.将项目添加到最后然后使用整个集合将非常浪费.
很遗憾没有通用的BinarySearch扩展方法IList<T>,但写起来不应该太难.假设你想要写一个通用的方法来做到这一点(我会建议你做-它不会比写一个显著困难InfoItem特异性之一)你要么想采取IComparer<T> 或投影,如
public static int BinarySearch<T>(this IList<T> source, IComparer<T> comparer)
Run Code Online (Sandbox Code Playgroud)
要么
public static int BinarySearch<TSource, TKey>(
this IList<TSource> source,
Func<TSource, TKey> keySelector)
Run Code Online (Sandbox Code Playgroud)
我建议你使返回值遵循约定List<T>.BinarySearch,这样如果找不到匹配,它将返回项目将被插入的索引的按位否定.