当前位置: 首页 > 编程语言 > C#

如何实现IOrderedEnumerable分享

时间:2023-04-10 22:17:09 C#

C#:如何实现IOrderedEnumerable我想实现一些不同的算法来练习,只是为了看看我到底有多糟糕,然后变得更好:p反正我想我会的尝试使用IEnumerable和IOrderedEnumerable以及其他.Net集合类型以实现兼容性(这样我写的东西以后可以更容易地使用)。但是除了使用OrderBy和ThenBy扩展方法之外,我找不到返回IOrderedEnumerable实例的方法。所以我想我必须创建自己的类来实现这个接口。但老实说,界面对我来说没有意义。有可能,但我不确定。我创建了一个空类,添加了接口,然后让ReSharper为我添加空实现。它看起来像这样:classMyOrderedEnumerable:IOrderedEnumerable{//////根据键对an的元素执行后续排序。/////////其元素根据键排序的An。//////用于提取每个元素的键。用于比较键在返回序列中的位置。true将元素按降序排序;false按升序对元素进行排序。.2publicIOrderedEnumerableCreateOrderedEnumerable(FunckeySelector,IComparercomparer,booldescending)生成的键的类型thrownewNotImplementedException();}//////返回一个遍历集合的枚举数。/////////可用于遍历集合的A。//////1publicIEnumeratorGetEnumerator(){thrownewNotImplementedException();}//////返回一个遍历集合的枚举器。/////////可用于遍历co的对象收藏。//////2IEnumeratorIEnumerable.GetEnumerator(){返回GetEnumerator();我不明白的是CreateOrderedEnumerable方法。这是什么意思?好吧,我猜它当然会创建一个有序的可枚举对象,但是如何创建呢?排序算法本身应该放在那里吗?什么会排序?该方法中没有任何项目集合,那么这意味着要收集订单的位置在哪里?你会如何使用这个类?它是否意味着要实施为例如一个需要分类的私人助手类?然后,您可以使用QuickSorter:IOrderedEnumerable而不是MyOrderedEnumerable:IOrderedEnumerable,它在其构造函数中获取一个集合,并在调用CreateOrderedEnumerable方法时对其进行排序……但那会是什么呢?如果有人调用GetEnumerator并在调用该方法之前开始枚举,会发生什么情况?哈哈才发现我前阵子在这里问过类似的问题。但这只是关于是否有可能退货。所以我想这个问题是对我得到的答案之一的回应=)我有一个示例实现,您可以看一下。它的设计目的不是为了提高效率,但它应该可以帮助您入门。基本上,IOrderedEnumerable只需要知道它的当前顺序,这样它就可以创建一个新的顺序。假设你已经有了一个IComparer,你可以这样构建一个新的IComparer:if(baseResult!=0){返回baseResult;}}TKeyfirstKey=keySelector(first);TKeysecondKey=keySelector(second);返回比较器。比较(firstKey,secondKey);所以基本上你创建了一系列从“最不重要”到“最重要”的比较器。您还需要将“降序”位放在那里,但这很容易:)在上面链接的示例中,三个不同的方面在MiscUtil中已经存在的三个不同的类中表示:比较器非常适合此链接一起。大概你的类将有一些IEnumerable的实现来在内部存储变量(例如List)。既然如此,这个方法的实现就很简单了:以上就是C#学习教程:C#:如何实现IOrderedEnumerable分享的所有内容。Follow—privateListdata=newList();publicIOrderedEnumerableCreateOrderedEnumerable(FunckeySelector,IComparercomparer,booldescending){返回降序?data.OrderByDescending(keySelector,比较器):data.OrderBy(keySelector,比较器);}收藏不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: