C# 的 List<> 容器提供了 IComparer 接口 來讓使用者可以靈活的對 容器進行排序。
下面通過對一個背包 List<> 進行以下規則排序:
1、首先按道具類型排序
2、類型相同然後按道具品級排序
3、品級相同然後按等級排序
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
{
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 itemInfoList = new List();
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 itemInfoList)
{
itemInfoList.Sort(new ItemInfoCompare());
}
}
}