C#中List集合的排序方法总结
C#中List集合的排序方法有Where ,AsParallel().Where,GroupBy和ToLookup。
控制台示例程序:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MyList
{class Program{public class Custom{public string Name { get; set; }public int Age { get; set; }public string Address { get; set; }}/// <summary>/// AsParallel排序测试效率:并发效率优于普通/// <mark>/// 测试现象:并行排序的效率低因为并行是乱序的,虽说并发的理论上要比直接排序块,但中间List 又多了一步操作AsParallel,这个地方应该会耗时,并发是乱序排序就跟List差不多了,加上AsParallel操作就会更慢。/// </mark>/// </summary>public static void AsParallel(){Stopwatch sw = new Stopwatch();List<Custom> customs = new List<Custom>();for (int i = 0; i < 2000000; i++){customs.Add(new Custom() { Name = "Jack", Age = 21, Address = "NewYork" });customs.Add(new Custom() { Name = "Jime", Age = 26, Address = "China" });customs.Add(new Custom() { Name = "Tina", Age = 29, Address = "ShangHai" });customs.Add(new Custom() { Name = "Luo", Age = 30, Address = "Beijing" });customs.Add(new Custom() { Name = "Wang", Age = 60, Address = "Guangdong" });customs.Add(new Custom() { Name = "Feng", Age = 25, Address = "YunNan" });}sw.Restart();sw.Start();var result = customs.Where<Custom>(c => c.Age > 26).ToList();sw.Stop();Console.WriteLine("Linq time is {0}.", sw.ElapsedMilliseconds);sw.Restart();sw.Start();var result2 = customs.AsParallel().Where<Custom>(c => c.Age > 26).ToList();sw.Stop();Console.WriteLine("Parallel Linq time is {0}.", sw.ElapsedMilliseconds);}/// <summary>/// ToLookup排序:ToLookup方法是将集合转换成一个只读集合,所以在大数据量分组时性能优于List/// <mark>/// 测试现象:虽然是只读,但是中间转换过程耗时,所以看到的现象比普通的更慢./// </mark>/// </summary>public static void ToLookup(){Stopwatch stopWatch = new Stopwatch();List<Custom> customs = new List<Custom>();for (int i = 0; i < 2000000; i++){customs.Add(new Custom() { Name = "Jack", Age = 21, Address = "NewYork" });customs.Add(new Custom() { Name = "Jime", Age = 26, Address = "China" });customs.Add(new Custom() { Name = "Tina", Age = 29, Address = "ShangHai" });customs.Add(new Custom() { Name = "Luo", Age = 30, Address = "Beijing" });customs.Add(new Custom() { Name = "Wang", Age = 60, Address = "Guangdong" });customs.Add(new Custom() { Name = "Feng", Age = 25, Address = "YunNan" });}stopWatch.Restart();var groupByAge = customs.GroupBy(item => item.Age).ToList();foreach (var item in groupByAge){Console.WriteLine("Age={0},count = {1}", item.Key, item.Count());}stopWatch.Stop();Console.WriteLine("Linq group by time is: " + stopWatch.ElapsedMilliseconds);stopWatch.Restart();var lookupList = customs.ToLookup(i => i.Age);foreach (var item in lookupList){Console.WriteLine("LookUP:Age={0},count = {1}", item.Key, item.Count());}stopWatch.Stop();Console.WriteLine("LookUp group by time is: " + stopWatch.ElapsedMilliseconds);}/// <summary>/// 函数入口/// </summary>/// <param name="args"></param>static void Main(string[] args){Console.WriteLine("AsParallel is runing");for (var i = 0; i < 10; i++){AsParallel();}Console.WriteLine("ToLookup is runing");ToLookup();Console.Read();}}
}
参考地址: http://www.cnblogs.com/yunfeifei/p/3998783.html
C#中List集合的排序方法总结相关推荐
- 【转载】C#中List集合使用Exists方法判断是否存在符合条件的元素对象
在C#的List集合操作中,有时候需要根据条件判断List集合中是否存在符合条件的元素对象,此时就可以使用List集合的扩展方法Exists方法来实现,Exists方法的签名为bool Exists( ...
- 【转载】C#中List集合使用Contains方法判断是否包含某个对象
在C#的List集合中,如果要查找List集合是否包含某一个值或者对象,如果不使用List集合类的扩展方法的话一般会使用for循环或者foreach遍历来查找,其实List集合类中的扩展方法Conta ...
- java中的五种排序方法_用Java排序的五种有用方法
java中的五种排序方法 Java排序快速概述: 正常的列表: private static List VEGETABLES = Arrays.asList("apple", &q ...
- Python3.x中set()集合的使用方法
Python中set()集合的使用方法 python中的set()是一个无序的不重复的元素集. sets 支持 x in set, len(set),和 for x in set. 1.初始化方法: ...
- Java中List集合的addAll方法的小坑
Java中List集合的addAll方法的小坑 遇到的问题 已有一个封装类的ArrayList的集合,命名为firstList,现在需要把firstList中的值复制给另一个List,另一个List命 ...
- 【转载】C#中List集合使用AddRange方法将一个集合加入到指定集合末尾
C#编程开发过程中,List集合是时常使用到的集合对象,如果在List集合的操作中需要将1个List集合加入到另一个List集合的末尾,则可以使用List集合的AddRange方法来实现,AddRan ...
- JAVA中的集合与排序
一:常见的集合类 Collection接口 和 Map接口 Collection ①:collection是最常见的集合的上级接口. ②:继承自collection的常用接口有List,Set, ...
- 敏捷开发中的MoSCoW优先级排序方法
作者:陈勇 出处:blog.csdn.net/cheny_com 有没有遇到某个重要的条目每次都被漏下完不成的情况? 有没有遇到冲刺结束的时候发现一大堆条目都已经开工了但都没有完成的情况? 有没有遇到 ...
- JAVA数组中五种常见排序方法
前言: 几种常用的JAVA数组排序方法的整合. 法一:Arrays.sort() Arrays.sort()排序方法在java中是最简单且最常用的排序方法 int []arr1= {45,34,59, ...
最新文章
- ASP.NET MVC (一)
- 【HDOJ】2209 翻纸牌游戏
- 框架之一:mybatis
- Android webview 写入cookie的解决方法以及一些属性设置
- 天使投资家李镇樟:如何培养世界级企业家
- 【bzoj4385】[POI2015]Wilcze doły
- SAP ABAP实用技巧介绍系列之 How is configuration data loaded
- MySQL小问题:导入employee测试数据
- Oracle 在 Linux 下移动控制文件步骤
- 使用properties和SPContext时须小心
- 可怕!你没看错,这次确实是纯手工实现一个MyBatis框架!
- 白盒测试的学习之路----(五)TestNG的参数分离
- 函数参数中的中括号代表什么
- 华为鸿蒙2048小游戏,从零开始使用华为DevEco Studio编写2048小游戏
- 微信小程序 图片处理的几个样式
- 漫画聚合阅读器Tachidesk
- idea 生成项目结构图
- linux课程以及Linux主要学习哪些内容
- 2020年十七届华为杯数学建模比赛记录
- 如何学会计算机基础,学会这4点,你就能快速掌握电脑基本操作,摆脱新手的标签...
热门文章
- VHDL实验一:2选1数据选择器(绘制原理图)
- MSIL实用指南-加载和保存参数
- AM2302(又称DHT22)温湿度传感器的使用及Proteus仿真(附源码)
- 【多传感融合】优达学城多传感融合学习笔记(一)——针孔相机模型
- android音频上传及音频下载播放总结
- SpringBoot使用JPA如何查询部分字段
- ZZULIOJ:1006求等差数列的和
- 数据湖YYDS! Flink+IceBerg实时数据湖实践
- IntelliJ IDEA(2020.2)的下载、安装步骤(详细讲解)
- 计算机毕业设计PHP+安卓仿网易云音乐客户端APP(源码+程序+lw+远程调试)