C# 的 List<> 容器提供了 IComparer 接口 来让使用者可以灵活的对 容器进行排序。
下面通过对一个背包 List<> 进行以下规则排序:
1、首先按道具类型排序
2、类型相同然后按道具品级排序
3、品级相同然后按等级排序
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
using System;
using System.Collections.Generic;
using System.Text;
namespace bagtest
{
public class ItemInfo
{
public int mItemType; //1道具 2礼包;
public int mItemLevel;//等级;
public int mitemRank;//品级;
public ItemInfo(int itemtype, int itemlevel, int itemrank)
{
mItemType = itemtype;
mItemLevel = itemlevel;
mitemRank = itemrank;
}
public bool isSame(ItemInfo iteminfo)
{
if ((mItemType == iteminfo.mItemType) && (mitemRank == iteminfo.mitemRank) && (mItemLevel == iteminfo.mItemLevel))
{
return true;
}
return false;
}
}
public class ItemInfoCompare : IComparer<ItemInfo>
{
public int Compare(ItemInfo infoA, ItemInfo infoB)
{
if (infoA.isSame(infoB))
{
return 0;
}
//首先比较类型;
if (infoA.mItemType > infoB.mItemType)
{
return 1;
}
else if (infoA.mItemType < infoB.mItemType)
{
return -1;
}
//类型相同,比较品级;
if (infoA.mitemRank > infoB.mitemRank)
{
return 1;
}
else if (infoA.mitemRank < infoB.mitemRank)
{
return -1;
}
//品级相同,比较等级;
if (infoA.mItemLevel > infoB.mItemLevel)
{
return 1;
}
else if (infoA.mItemLevel < infoB.mItemLevel)
{
return -1;
}
return 0;
}
}
class Program
{
static void Main(string[] args)
{
List<ItemInfo> itemInfoList = new List<ItemInfo>();
itemInfoList.Add(new ItemInfo(1, 2, 2));//道具 2级 品级3
itemInfoList.Add(new ItemInfo(2, 3, 2));//礼包 2级 品级1
itemInfoList.Add(new ItemInfo(1, 3, 2));//道具 2级 品级2
itemInfoList.Add(new ItemInfo(1, 2, 1));//道具 2级 品级1
itemInfoList.Add(new ItemInfo(1, 2, 3));//道具 2级 品级3
itemInfoList.Add(new ItemInfo(2, 2, 1));//礼包 2级 品级1
itemInfoList.Add(new ItemInfo(1, 1, 1));//道具 1级 品级1
itemInfoList.Add(new ItemInfo(2, 1, 3));//礼包 1级 品级3
//输出a中全部元素
Console.WriteLine("排序前");
foreach (var v in itemInfoList)
{
Console.WriteLine("v.mItemType=" + v.mItemType + " v.mitemRank=" + v.mitemRank + " v.mItemLevel=" + v.mItemLevel);
}
SortItem(itemInfoList);
//输出a中全部元素
Console.WriteLine("排序后");
foreach (var v in itemInfoList)
{
Console.WriteLine("v.mItemType=" + v.mItemType + " v.mitemRank=" + v.mitemRank + " v.mItemLevel=" + v.mItemLevel);
}
Console.ReadLine();
}
static void SortItem(List<ItemInfo> itemInfoList)
{
itemInfoList.Sort(new ItemInfoCompare());
}
}
}
原文地址:http://blog.csdn.net/huutu/article/details/45461915