先说需求:找出一个对象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. zoj 1033 与其说是搜索,不如说是枚举

    zoj 与其说是搜索,不如说是枚举,只不过是通过搜索来实现的罢了. 主要是要注意好闰年的判断,特别是要注意好一串数字的划分. 题意其实我也看了一个晚上,才渐渐的看懂. 题意: 给你一个字符串,其中包含 ...

  2. C#:实体类中做数据验证

    主要是在实体类中验证 using System; namespace Jone.Function.attribute{        /// <summary>        /// 附加 ...

  3. JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯

    分布式开发的历史 利用Remote方式调用远程对象实现服务器与客户端之间通讯是一种常用的网络开发方式,在.NET与JAVA开发当中,对Remote远程对象早已有着足够的支持(对Remote远程对象调用 ...

  4. Nginx安装及配置简介

    前言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大 ...

  5. HDU 5648 DZY Loves Math 暴力打表

    题意:BC 76 div1 1003有中文题面 然后官方题解看不懂,我就不说了,然后看别人的题解 因为询问i,j最大都是15000,所以可以预处理,res[i][j]代表答案,然后显然这是开不下的,也 ...

  6. HDOJ 1879

    思路:求最小生成树(最小生成树就是权值之和最小的极小连通子图) ,注意将已修过的边的权值置为0: 数据结构:由于数据量小,可以用临接矩阵直接存储图 #include<stdio.h> #i ...

  7. HW2.13

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

  8. POJ2250 - Compromise(LCS+打印路径)

    题目大意 给定两段文本,问公共单词有多少个 题解 裸LCS... 代码: #include<iostream> #include<string> using namespace ...

  9. 新年Uber司机端换新装啦!

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. 如何让2个并列的div根据内容自动保持同等高度

    最近在工作中碰到一个需求: 有左右2个并列的div,2个div都不能限定高度.左div为导航,右div为内容.如何能让左div块自动获得和右div块相等的高度? 同时,也有网友提问到"如果右 ...