接著我們可以利用 List.Sort 的方法來針對多個物件做排序,
假設我們想要讓用戶可以依照筆劃、注音等方式自行選擇排序規則,
以下是個簡單的範例
public class Item
{
public int ItemId = 0;
public String ItemTitle = "";
public String ItemDescription = "";
}
排序方法如下
範例程式碼內的 0x00000404 可以在這裡查到其他的 LCID
http://msdn.microsoft.com/en-us/library/a7zyyk0c(v=vs.71).aspx
public void SortSample()
{
List<Item> itemList = new List<Item>();
itemList.Add(new Item() { ItemTitle = "一" });
itemList.Add(new Item() { ItemTitle = "二" });
itemList.Add(new Item() { ItemTitle = "三" });
itemList.Add(new Item() { ItemTitle = "四" });
itemList.Add(new Item() { ItemTitle = "伍" });
// 指定 Culture 為 zh-TW Stroke Count (筆劃排序)
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(0x00000404);
itemList.Sort((A, B) => { return A.ItemTitle.CompareTo(B.ItemTitle); });
foreach (Item s in itemList)
{
Debug.Write(s.ArtistName + " ");
}
// 結果輸出:一 二 三 四 伍
// 指定 Culture 為 zh-TW Bopomofo (注音排序)
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(0x00030404);
itemList.Sort((A, B) => { return A.ItemTitle.CompareTo(B.ItemTitle); });
foreach (Item s in itemList)
{
Debug.Write(s.ArtistName + " ");
}
// 結果輸出:四 三 二 一 伍
}
此外,如果不想要利用改變 CurrentCulture 的方式,
也可以使用 CompareInfo 類別的 Compare 方法來比較兩個字串,
再將比較的方法寫入 Compare delegate 即可,CompareInfo 使用方法如下
CompareInfo strokeOrder = CompareInfo.GetCompareInfo(0x00000404); // 以筆劃比較
int n = strokeOrder.Compare("九", "玖"); // n = -1
比較需要注意的是,以上範例程式碼是在 WPF 之下執行的,
如果想要把這裡的指令用在 Windows Phone (Silverlight) 上面,
要注意一下 Windows Phone SDK 裡的 CultureInfo 類別只有字串一種建構方式,
請使用以下方式建構 CultureInfo Object
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-TW");
沒有留言:
張貼留言