C# List.Sort()用法
2015-11-04 18:32
387 查看
类似背包系统的多条件排序
如下
排序规则
先对Level的大小排序
再对Star的大小排序
最后按照ID大小排序
以上就完成了降序排列,如需升序排列,修改a和b的比较顺序即可,如
降序
升序
运行结果为
如下
public class BagItem { public int ID; public int Level; public int Star; }
排序规则
先对Level的大小排序
再对Star的大小排序
最后按照ID大小排序
关键代码:
int SortBy_Level_Star_ID(BagItem a, BagItem b) { if (a.Level != b.Level) { return b.Level.CompareTo(a.Level); } else if (a.Star != b.Star) { return b.Star.CompareTo(a.Star); } else if (a.ID != b.ID) { return b.ID.CompareTo(a.ID); } return 0; }
以上就完成了降序排列,如需升序排列,修改a和b的比较顺序即可,如
降序
if (a.Level != b.Level) { return b.Level.CompareTo(a.Level); }
升序
if (a.Level != b.Level) { return a.Level.CompareTo(b.Level); }
完整测试代码如下
using System;
using System.Collections.Generic;
namespace ListSort
{public class BagItem { public int ID; public int Level; public int Star; }
class Program
{
static int SortBy_Level_Star_ID(BagItem a, BagItem b) { if (a.Level != b.Level) { return b.Level.CompareTo(a.Level); } else if (a.Star != b.Star) { return b.Star.CompareTo(a.Star); } else if (a.ID != b.ID) { return b.ID.CompareTo(a.ID); } return 0; }
static void Main(string[] args)
{
// for test;
List<BagItem> BagLists = new List<BagItem>();
BagItem _item = null;
_item = new BagItem();
_item.ID = 1;
_item.Level = 1;
_item.Star = 2;
BagLists.Add(_item);
_item = new BagItem();
_item.ID = 0;
_item.Level = 1;
_item.Star = 2;
BagLists.Add(_item);
_item = new BagItem();
_item.ID = 2;
_item.Level = 2;
_item.Star = 1;
BagLists.Add(_item);
// before test;
for (int i = 0; i < BagLists.Count; ++i)
{
Console.WriteLine("Item_" + i);
Console.WriteLine(" level=" + BagLists[i].Level
+ " star=" + BagLists[i].Star
+ " id=" + BagLists[i].ID);
}
// For test the sort function;
BagLists.Sort(SortBy_Level_Star_ID);
// after test;
Console.WriteLine("======After Sort======");
for (int i = 0; i < BagLists.Count; ++i)
{
Console.WriteLine("Item_" + i);
Console.WriteLine(" level=" + BagLists[i].Level
+ " star=" + BagLists[i].Star
+ " id=" + BagLists[i].ID);
}
Console.ReadLine();
}
}
}
运行结果为
相关文章推荐
- C#执行DOS命令(CMD命令)
- C#中需要注意到的点
- C# 调用Widows MediaPlayer方法以及可能出现错误处理
- C#使用EmguCV实现视频读取和播放,及多个视频一起播放的问题
- C# Gabbage Collecting System
- C# Gabbage Collecting System
- 解决WinForm(C#)中MDI子窗体最大化跑偏的问题
- 8.C#循环语句练习2
- C# Rotating Oval
- C# Rotating Oval
- C# Image Resizer
- C# Image Resizer
- C#中Dictionary的用法及用途(转)
- C#使用ConditionalAttribute特性来实现代码调试
- C# 使用lock关键字lock不同的对象
- C# 委托delegate 例子
- C# greedy snake source code
- (c#)不同窗体间传值
- AutoCAD.Net/C#.Net QQ群:193522571 AutoCAD向命令栏发送命令
- AutoCAD.Net/C#.Net QQ群:193522571 AutoCAD中状态栏