win10 uwp 如何让一个集合按照需要的顺序进行排序
2017-09-29 14:14
323 查看
虽然这是 C# 的技术,但是我是用在 uwp ,于是就把标题写这个名。有一天,我的小伙伴让我优化一个列表。这个列表是 ListView 他绑定了一个 ObservableCollection 所以需要对他做很少的修改。
我绑定一个数量很多的 ObservableCollection 这个ListView 不能做虚拟化,所以性能问题是如果对这个列表做的修改多,那么速度很慢。我知道的就是一个 数组,他是表示修改后的列表需要的顺序。
于是这个数组我叫 sort ,是一个
上面的代码就是希望把 2 和 1 的位置换一下,当然,实际的是比较复杂的。于是我寻找了两个方法,简单的方法请看下面
这个方法性能很好,可以使用 ObservableCollection 的 CollectionChanged 查看列表修改的数量
第二个方法是使用插入和删除,因为 Move 只有通知列表才有,为了可以使用 List 的,所以就写了第二个方法。
可以看到这两个方法的速度都比较好,之前使用的是清除整个列表才添加,可以看到这个方法的速度比上面两个方法差。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
我绑定一个数量很多的 ObservableCollection 这个ListView 不能做虚拟化,所以性能问题是如果对这个列表做的修改多,那么速度很慢。我知道的就是一个 数组,他是表示修改后的列表需要的顺序。
于是这个数组我叫 sort ,是一个
IList<int>,他记录了需要排序的顺序
IList<int> sort = new List<int>() { 0,2,1,3 };
上面的代码就是希望把 2 和 1 的位置换一下,当然,实际的是比较复杂的。于是我寻找了两个方法,简单的方法请看下面
private static void Sort<T>(ObservableCollection<T> list, IList<int> sort) { //按照给出的数组排序 var source = list.ToList(); for (int i = 0; i < sort.Count; i++) { //假如原来的是 0 1 2 //排序需要 0 2 1 //那么在sort[1]的时候,发现 list[1] = 1 =2 所以需要在 1 的地方插入 2,同时移除 1 ,这个方法可以获得最少改动 //如果当前的值和排序要的不相同 if (list[i].Equals(source[sort[i]])) { continue; } //拿出排序需要的值,插入到现在的位置 list.Move(sort[i], i); } }
这个方法性能很好,可以使用 ObservableCollection 的 CollectionChanged 查看列表修改的数量
第二个方法是使用插入和删除,因为 Move 只有通知列表才有,为了可以使用 List 的,所以就写了第二个方法。
private static void Sort<T>(IList<T> list, List<int> sort) { var source = list.ToList(); for (int i = 0; i < sort.Count; i++) { if (list[i].Equals(source[sort[i]])) { continue; } var temp = source[sort[i]]; list.Remove(temp); list.Insert(i, temp); } }
可以看到这两个方法的速度都比较好,之前使用的是清除整个列表才添加,可以看到这个方法的速度比上面两个方法差。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
相关文章推荐
- 转:从键盘输入一个字符串,按照字符顺序从小到大进行排序,并要求删除重复的的字符。
- 从键盘输入一个字符串,按照字符顺序从小到大进行排序,并要求删除重复的的字符。
- 给定一个字符串数组{"nba","abc","cba","zz","qq","haha"},请按照字典顺序进行从小到大的排序。
- php和mysql采用utf-8编码时实现按照一个文本字段的首字母的拼音顺序进行排序的方法
- Java中如何把一组对象按照其某一个属性值进行排序?
- Java中如何把一组对象按照其某一个属性值进行排序
- 如何实现在客户端,使CheckBox按照选择的顺序进行排序--来自博问的问题
- TreeMap集合如何按照Value进行排序
- java 给定一个字符串数组。按照字典顺序进行从小到大的排序。
- java一个对象根据另一个集合的顺序进行排序
- Java中如何把一组对象按照其某一个属性值进行排序?详见补充:
- 如何安装整个linux系统中所需要的mp3播放库插件? 可以在安装rpmfusion仓库后直接通过dnf install进行按照就可以了
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- SQL 语句中按照in语句原有的顺序进行排序
- 客户端CheckBox按照选择的顺序进行排序
- Java:集合,对列表(List)中的数据(整型、字符串、日期等)进行排序(正序、倒序)的方法;字符串按照整型排序的方法
- 如何对List集合中的对象进行按某个属性排序
- SQL 按照一定顺序进行排序
- java中对list集合中的数据按照某一个属性进行分组
- List集合按照日期字段进行排序