在List中出最⼤值的两种⽅法先说需求:出⼀个对象List中,某个属性值最⼤的对象。
1.定义对象
1private class A
2 {
3public int ID { get; set; }
4
writeline输出数值变量5public string Name { get; set; }
6 }
2.为两种⽅法定义两个时间段全局变量。
1private static TimeSpan compare = new TimeSpan();
2private 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次,打印每种⽅法所⽤时间。
1private static void Main(string[] args)
2 {
3 List<A> list = new List<A>();
4 list = Enumerable.Range(1, 10000000).Select(n => new A { ID = n, Name = n.ToString() }).ToList();
5 Console.WriteLine("print");
6int i = 0;
7while (i < 100)
8 {
9 MaxByOrder(list);
10 Max(list);
11 i++;
12 }
13 Console.WriteLine("Compare:" + compare);
14 Console.WriteLine("Order:" + order);
15 Console.ReadLine();
16 }
6.查看运⾏结果:
⾸先两种⽅式都到了最⼤值,⽤第⼀种⽅式基本上花费时间为第⼆种的四到五倍。
ok,今天就先到这,希望⼤家拍砖……
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论