先说需求:找出一个对象List中,某个属性值最大的对象。

1.定义对象

   private class A
{
public int ID { get; set; } public string Name { get; set; }
}
 2.为两种方法定义两个时间段全局变量。
1         private static TimeSpan compare = new TimeSpan();
private static TimeSpan order = new TimeSpan();
 3.第一种方法:对列表按照某一列倒序排列取出第一个对象。
         private static void MaxByOrder(List<A> list)
{
 Stopwatch sw = new Stopwatch();
      sw.Start();
      A max = list.OrderByDescending(i => i.ID).First();
      sw.Stop();
      order += sw.Elapsed;
      Console.WriteLine(max.Name + "  Order:" + sw.Elapsed.ToString());
}
4.第二种方法:先找出列表中某个属性的最大值,然后在列表中取出第一个与最大值相等的对象。
    private static void Max(List<A> list)
    {
      Stopwatch sw = new Stopwatch();
      sw.Start(); int maxID = list.Max(m => m.ID);
      A max = list.First(i => i.ID == maxID);
      sw.Stop();
      compare += sw.Elapsed;
      Console.WriteLine(max.Name + "  Compare:" + sw.Elapsed.ToString());
    }
5.Main方法:生成测试列表,并循环调用两个方法100次,打印每种方法所用时间。
         private static void Main(string[] args)
{
List<A> list = new List<A>();
list = Enumerable.Range(, ).Select(n => new A { ID = n, Name = n.ToString() }).ToList();
Console.WriteLine("print");
int i = ;
while (i < )
{
MaxByOrder(list);
Max(list);
i++;
}
Console.WriteLine("Compare:" + compare);
Console.WriteLine("Order:" + order);
Console.ReadLine();
}

6.查看运行结果:

首先两种方式都找到了最大值,用第一种方式基本上花费时间为第二种的四到五倍。

ok,今天就先到这,希望大家拍砖……

在List中找出最大值的两种方法的更多相关文章

  1. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  2. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)

    Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...

  3. Python 中格式化字符串 % 和 format 两种方法之间的区别

    Python2.6引入了 format 格式化字符串的方法,现在格式化字符串有两种方法,就是 % 和 format ,具体这两种方法有什么区别呢?请看以下解析. # 定义一个坐标值 c = (250, ...

  4. 在shell script中进行数值运算的两种方法

    方法1:使用"$((计算式))"的方式进行数值运算,不需要使用declare命令显示声明数值型变量来存储计算结果: 方法2:使用declare命令配合"-i"选 ...

  5. Android中Intent传递对象的两种方法(Serializable,Parcelable)

    今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...

  6. [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)

    http://blog.csdn.net/xyz_lmn/article/details/5908355 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种 ...

  7. Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!

    [转][原文] 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object); ...

  8. Oracle中spool命令实现的两种方法比较

    ---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...

  9. ZBrush中设置背面遮罩的两种方法

    背面遮罩是ZBrush软件实时遮罩的一种,它的出现能够解决我们在模型雕刻时的一些问题.我们在 ZBrush®中雕刻一个比较薄的物体时,经常会不经意的雕刻到背面的物体.那么遇到此类状况该如何设置ZBru ...

随机推荐

  1. 微软Azure 存储管理器的简单介绍

    Windows Azure存储用户经常希望能够在“管理器”中查看他们的数据,管理器指的是一款可用于显示存储帐户数据的工具.我们之前提供了我们所知的存储管理器列表.在本文中,我们将对此列表进行更新,使其 ...

  2. CURL超时处理

    一般会设置一个超时时间1S,就是说如果php那边在1S内没有返回给urlserver的话就忽略掉该请求,及不阻塞等待返回了,直接处理下面的操作. 现在php那边有时候会卡,这样一卡就无法再1S内返回消 ...

  3. HW5.17

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  4. HW4.46

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序

    Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序).没错,Robocopy的功能是拷贝文件,你也许会觉得无聊并且要翻阅下一篇文章 ...

  6. 数据中心基础设施自动化运维之puppet专项

    http://forge.puppetlabs.com/treydock/yum_cron  [puppet功能扩展forge] http://docs.puppetlabs.com/referenc ...

  7. 原来DataTable的Distinct竟如此简单![转]

    本文转自:http://www.cnblogs.com/BlueFly/archive/2009/01/08/1372151.html 有时我们需要从DataTable中抽取Distinct数据,以前 ...

  8. 【三支火把】---C文件学习

    ---恢复内容开始--- 又看了一遍文件的知识点了,断断续续已经看了2-3遍,也就这次花了点时间做了一下总结,以后我想都不会再去翻书了,哈哈. 1. 基于缓冲区的文件操作2. 打开关闭文件3. 单个字 ...

  9. (翻译)什么是Java的永久代(PermGen)内存泄漏

    http://www.codelast.com/?p=7248 转载请注明出处:http://www.codelast.com/ 本文是我对这篇文章的翻译:What is a PermGen leak ...

  10. int 指令

    int n 也就是中断操作->根据中断类型码来查找中断向量表(中断向量表在0-3ffh这个内存空间) 调用int n 也就操作了下面的步骤 1)取中断类型码n: 2)标志寄存器入栈,IF=0,T ...