2018-8-10-win10-uwp-如何让一个集合按照需要的顺序进行排序
title | author | date | CreateTime | categories |
---|---|---|---|---|
win10 uwp 如何让一个集合按照需要的顺序进行排序
|
lindexi
|
2018-08-10 19:16:50 +0800
|
2018-2-13 17:23:3 +0800
|
Win10 UWP
|
虽然这是 C# 的技术,但是我是用在 uwp ,于是就把标题写这个名。有一天,我的小伙伴让我优化一个列表。这个列表是 ListView 他绑定了一个 ObservableCollection 所以需要对他做很少的修改。
我绑定一个数量很多的 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);
}
}
可以看到这两个方法的速度都比较好,之前使用的是清除整个列表才添加,可以看到这个方法的速度比上面两个方法差。
2018-8-10-win10-uwp-如何让一个集合按照需要的顺序进行排序的更多相关文章
- win10 uwp 如何让一个集合按照需要的顺序进行排序
虽然这是 C# 的技术,但是我是用在 uwp ,于是就把标题写这个名.有一天,我的小伙伴让我优化一个列表.这个列表是 ListView 他绑定了一个 ObservableCollection 所以需要 ...
- win10 uwp 如何拖动一个TextBlock的文字到另一个TextBlock
我在堆栈网看到有人问 如何拖动一个TextBlock的文字到另一个TextBlock 于是看到一个大神给出的方法,下面我就来和大家说下如何拖动 一开始我们需要一个界面,就放两个TextBlock 一个 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- win10 uwp 使用 Microsoft.Graph 发送邮件
在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...
- Win10 UWP开发实现Bing翻译
微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...
- Win10/UWP开发—使用Cortana语音与App后台Service交互
上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...
- win10 uwp 列表模板选择器
本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...
- win10 uwp 获得元素绝对坐标
有时候需要获得一个元素,相对窗口的坐标,在修改他的位置可以使用. 那么 UWP 如何获得元素坐标? 我提供了一个方法,可以获得元素的坐标. 首先需要获得元素,如果没有获得元素,那么如何得到他的坐标? ...
- win10 uwp 毛玻璃
毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...
随机推荐
- flink中对于window和watermark的一些理解
package com.chenxiang.flink.demo; import java.io.IOException; import java.net.ServerSocket; import j ...
- img路径错误时,用户友好图片
img 标签的属性里面添加 onerror="this.src='error友好图片'" 就可以了!
- JMeter AI图片识别接口并发量测试
由于临时接到一个性能测试任务,测试8个独立接口在实验室环境的TPS.响应时间以及服务器性能监控如CPU.内存.IO等,没有明确具体的响应时间与并发数,需求较模糊. 1.软件.硬件环境信息:JMeter ...
- JUC源码分析-集合篇(三)ConcurrentLinkedQueue
JUC源码分析-集合篇(三)ConcurrentLinkedQueue 在并发编程中,有时候需要使用线程安全的队列.如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法. ...
- DDOS到底是什么,怎么预防,看看就明白了
可怕的DDOS怎么预防 分布式拒绝服务(DDoS: distributed denial-of-service)攻击是恶意破坏目标服务器.服务或网络的正常通信量的企图,其方法是用大量Internet通 ...
- Vue双向数据绑定原理深度解析
首先,什么是双向数据绑定?Vue是三大MVVM框架之一,数据绑定简单来说,就是当数据发生变化时,相应的视图会进行更新,当视图更新时,数据也会跟着变化. 在分析其原理和代码的时候,大家首先了解如下几个j ...
- linux 两个进程通过 共享内存 通信例子
例子1:两个进程通过共享内存通信,一个进程向共享内存中写入数据,另一个进程从共享内存中读出数据 文件1 创建进程1,实现功能,打印共享内存中的数据 #include <stdio.h> # ...
- node-express(1)建立post、get、跨域问题解决方案
首先下载express:npm i express let ess=require('express'); let app=ess(); let bodyParser=require('body-pa ...
- leetcode-第11场双周赛-5088-等差数列中缺失的数字
题目描述: 自己的提交: class Solution: def missingNumber(self, arr: List[int]) -> int: if len(arr) == 2: re ...
- 【命令】Maven命令
当前项目的依赖树: mvn dependency:tree -U.-B.-e -U参数: 该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默 ...