您的位置:首页 > 编程语言 > C#

C# List.Sort()用法

2015-11-04 18:32 387 查看
类似背包系统的多条件排序

如下

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();
}
}
}


运行结果为

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: