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