我想要實現的做法有些不同的算法,只是爲了看看我有多糟糕真的很和,以獲得更好:對C#:如何實現IOrderedEnumerable <T>
不管怎麼說,我想我會嘗試使用IEnumerable<T>
和IOrderedEnumerable<T>
和其他.Net集合類型只是爲了兼容(以便我寫的內容稍後可以更容易地使用)。
但我找不到一種方法來返回IOrderedEnumerable<T>
的實例,而不是使用OrderBy和ThenBy擴展方法。所以我想我必須創建自己的類來實現這個接口。但接口對我來說不太合理,說實話。它可能,但我不確定。
我創建了一個空類,添加了接口,然後讓ReSharper爲我添加空實現。它看起來像這樣:
class MyOrderedEnumerable<T> : IOrderedEnumerable<T>
{
/// <summary>
/// Performs a subsequent ordering on the elements of an <see cref="T:System.Linq.IOrderedEnumerable`1"/> according to a key.
/// </summary>
/// <returns>
/// An <see cref="T:System.Linq.IOrderedEnumerable`1"/> whose elements are sorted according to a key.
/// </returns>
/// <param name="keySelector">The <see cref="T:System.Func`2"/> used to extract the key for each element.</param><param name="comparer">The <see cref="T:System.Collections.Generic.IComparer`1"/> used to compare keys for placement in the returned sequence.</param><param name="descending">true to sort the elements in descending order; false to sort the elements in ascending order.</param><typeparam name="TKey">The type of the key produced by <paramref name="keySelector"/>.</typeparam><filterpriority>2</filterpriority>
public IOrderedEnumerable<T> CreateOrderedEnumerable<TKey>(Func<T, TKey> keySelector, IComparer<TKey> comparer, bool descending)
{
throw new NotImplementedException();
}
/// <summary>
/// Returns an enumerator that iterates through the collection.
/// </summary>
/// <returns>
/// A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
/// </returns>
/// <filterpriority>1</filterpriority>
public IEnumerator<T> GetEnumerator()
{
throw new NotImplementedException();
}
/// <summary>
/// Returns an enumerator that iterates through a collection.
/// </summary>
/// <returns>
/// An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
/// </returns>
/// <filterpriority>2</filterpriority>
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
什麼我不明白的是CreateOrderedEnumerable
方法。究竟是什麼意思?那麼,我想它當然會創建一個有序的枚舉,但是如何?排序算法本身應該放在那裏?它會排序?沒有收集任何項目進入該方法,那麼它是爲了獲得收集訂單?你將如何使用課堂?這是否意味着要實施例如一個私人幫手類內的東西,需要排序的東西?
然後代替MyOrderedEnumerable<T> : IOrderedEnumerable<T>
的,你可能有一個QuickSorter<T> : IOrderedEnumerable<T>
是花了集合在其構造和分類的時候,那個CreateOrderedEnumerable
方法被調用......但隨後會發生什麼,如果有人打電話GetEnumerator
,開始該方法之前枚舉被稱爲?
哈哈,剛發現我剛纔問了一些類似的東西here。但那只是如果有可能返回一個。所以我想這個問題是對我到達的答案的答覆=)
甜!將立即檢查它=) – Svish 2009-08-05 18:29:51
所以它會根據你給它的新比較器重新排序?要麼?不知道我是否明白... – Svish 2009-08-05 18:43:33
它不會重新排序 - 它會根據舊訂單和新比較創建新訂單並添加新訂單。它不會使用舊序列本身,除非得到原始的無序數據。請看代碼以獲取更多詳細信息:) – 2009-08-05 18:46:46