类似背包系统的多条件排序
如下
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();
}
}
}
运行结果为