如果我有一個List<T>
,我可以代替使用例如排序一個IList <T>到位
myList.Sort((x,y) => x.MyComparisonMethod(y));
如果我有一個IList<T>
排序的話,我可以將其分類到使用
var sortedIList = unsortedIList.OrderBy(x => x.SortingValue);
一個新的列表
我如何排序到位的IList<T>
?
我使用C#.NET 4.5.1。
如果我有一個List<T>
,我可以代替使用例如排序一個IList <T>到位
myList.Sort((x,y) => x.MyComparisonMethod(y));
如果我有一個IList<T>
排序的話,我可以將其分類到使用
var sortedIList = unsortedIList.OrderBy(x => x.SortingValue);
一個新的列表
我如何排序到位的IList<T>
?
我使用C#.NET 4.5.1。
我懷疑你指的是事實,你OrderBy
不會編譯。這是因爲它返回一個IOrderedEnumerable
,這是不是一個IList
,你必須執行ToList()
之後將其轉換回IList
實現:
var sortedIList = unsortedIList.OrderBy(x => x.SortingValue).ToList();
如果你想使用自己的IComparer
:
var sortedIList = unsortedIList.OrderBy(x => x.SortingValue, new MyComparer()).ToList();
這並不回答這個問題,因爲它沒有對'unsortedIList' *進行排序* –
「我可以將其分類到使用一個新的列表」不,並非如此,OrderBy
犯規返回一個列表,你必須調用ToList
創建一個新的列表。是你的問題如何使用List.Sort
與IList<T>
而不是List<T>
?
你可以寫一個擴展方法IList<T>
:
IList<string> strings = new[] { "B", "A", "C" };
strings.Sort();
更新:
public static IList<T> Sort<T>(this IEnumerable<T> sequence, IComparer<T> comparer = null)
{
var seqList = sequence as List<T>;
if (seqList != null)
{
seqList.Sort((IComparer<T>)comparer);
return seqList;
}
var seqArray = sequence as T[];
if (seqArray != null)
{
Array.Sort(seqArray, (IComparer<T>)comparer);
return seqArray;
}
return sequence.OrderBy(t => t, (IComparer<T>)comparer).ToList();
}
現在你可以在列表,數組或任何其他類型的序列使用Sort
如果你只是想一個數組或列表,你可以使用:
public static void Sort<T>(this IList<T> sequence, IComparer<T> comparer = null)
{
var seqList = sequence as List<T>;
if (seqList != null)
{
seqList.Sort((IComparer<T>)comparer);
return;
}
var seqArray = sequence as T[];
if (seqArray != null)
{
Array.Sort(seqArray, (IComparer<T>)comparer);
}
}
這看起來似乎有點混淆的行爲。它對'List
@CharlesMager:你可以把參數的'IList的
然後,你會'IList
編寫使用ArrayList.Adapter作爲IList<T>
包裝和自己CustomComparer
一些Comparison代表開始自己的擴展方法:
public static class IListExtensions
{
public static void Sort<T>(this IList<T> list, Comparison<T> comparison)
{
ArrayList.Adapter((IList)list).Sort(new CustomComparer<T>(comparison));
}
}
爲什麼是-1? -1沒有解釋的目的是什麼? –
我其實很喜歡這個,但在框架中找不到'CustomComparer'。相反,我用'比較器
你爲什麼要這麼做?你在那個'unsortedIList = unsortedIList.OrderBy(x => x.SortingValue);你不會解決什麼情況? –
_「我可以使用」_ no「將它分類到一個新列表中,情況並非如此,OrderBy不返回一個列表,您必須調用ToList來創建一個新列表。你的問題是如何使用'List.Sort'與'IList'而不是'List '? –
您必須創建一個'Sort'方法並使用它。以Mono使用的其中一個爲例。 – xanatos