我对IEnumerable中的order有疑问。据我所知,遍历IEnumerable是伪代码,可以写成下面的方式:while(enumerable.HasNext()){objectobj=enumerable.Current;...}现在,假设需要对一个已排序集合进行操作。在这种情况下可以使用IEnumerable还是尝试具有索引支持的其他方式(即IList)更好?换句话说:IEnumerable的合约是否对一般顺序做出任何保证?因此,IEnumerable不是保证排序的通用接口(interface)的正确方法。新的问题是什么接口(interface)或类应该用于有顺序的不可变集合?
我对IEnumerable中的order有疑问。据我所知,遍历IEnumerable是伪代码,可以写成下面的方式:while(enumerable.HasNext()){objectobj=enumerable.Current;...}现在,假设需要对一个已排序集合进行操作。在这种情况下可以使用IEnumerable还是尝试具有索引支持的其他方式(即IList)更好?换句话说:IEnumerable的合约是否对一般顺序做出任何保证?因此,IEnumerable不是保证排序的通用接口(interface)的正确方法。新的问题是什么接口(interface)或类应该用于有顺序的不可变集合?
我有string[]pkgratio="1:2:6".Split(':');varitems=pkgratio.OrderByDescending(x=>x);我想选择中间值并想出了这个。这是在IEnumberable中选择第二个值的正确方法吗?pkgratio.Skip(1).Take(1).First(); 最佳答案 虽然您的工作有效,但最直接的方法是使用数组的索引并引用第二项(在索引1处,因为第一个元素的索引从零开始):pkgratio[1]Console.WriteLine(pkgratio[1]);一个更完整的例子:str
我有string[]pkgratio="1:2:6".Split(':');varitems=pkgratio.OrderByDescending(x=>x);我想选择中间值并想出了这个。这是在IEnumberable中选择第二个值的正确方法吗?pkgratio.Skip(1).Take(1).First(); 最佳答案 虽然您的工作有效,但最直接的方法是使用数组的索引并引用第二项(在索引1处,因为第一个元素的索引从零开始):pkgratio[1]Console.WriteLine(pkgratio[1]);一个更完整的例子:str
请提出一种最简单的方法,从具有“N”项的集合中获取计数为“n”的随机混洗集合。其中n 最佳答案 根据mquander的回答和DanBlanchard的评论,这里有一个LINQ友好的扩展方法,它执行Fisher-Yates-Durstenfeldshuffle://takenrandomitemsfromyourCollectionvarrandomItems=yourCollection.Shuffle().Take(n);//...publicstaticclassEnumerableExtensions{publicstatic
请提出一种最简单的方法,从具有“N”项的集合中获取计数为“n”的随机混洗集合。其中n 最佳答案 根据mquander的回答和DanBlanchard的评论,这里有一个LINQ友好的扩展方法,它执行Fisher-Yates-Durstenfeldshuffle://takenrandomitemsfromyourCollectionvarrandomItems=yourCollection.Shuffle().Take(n);//...publicstaticclassEnumerableExtensions{publicstatic
调用Any()时在空对象上,它在C#中抛出ArgumentNullException。如果对象为null,则肯定没有“any”,它可能应该返回false。为什么C#会这样? 最佳答案 Any()是在问:“这个盒子里有没有元素?”如果方框是空的,答案显然是否定的。但如果一开始就没有盒子,那么这个问题就没有意义了,函数会提示:“你到底在说什么?没有盒子。”当我想将缺失的集合视为空集合时,我使用以下扩展方法:publicstaticIEnumerableOrEmpty(thisIEnumerablesequence){returnsequ
调用Any()时在空对象上,它在C#中抛出ArgumentNullException。如果对象为null,则肯定没有“any”,它可能应该返回false。为什么C#会这样? 最佳答案 Any()是在问:“这个盒子里有没有元素?”如果方框是空的,答案显然是否定的。但如果一开始就没有盒子,那么这个问题就没有意义了,函数会提示:“你到底在说什么?没有盒子。”当我想将缺失的集合视为空集合时,我使用以下扩展方法:publicstaticIEnumerableOrEmpty(thisIEnumerablesequence){returnsequ
如果我有一个像这样的IEnumerable:string[]items=newstring[]{"a","b","c","d"};我想遍历所有成对的连续项目(大小为2的滑动窗口)。这将是("a","b"),("b","c"),("c","d")我的解决方案是这样的publicstaticIEnumerable>Pairs(IEnumerableenumerable){IEnumeratore=enumerable.GetEnumerator();e.MoveNext();Tcurrent=e.Current;while(e.MoveNext()){Tnext=e.Current;yie
如果我有一个像这样的IEnumerable:string[]items=newstring[]{"a","b","c","d"};我想遍历所有成对的连续项目(大小为2的滑动窗口)。这将是("a","b"),("b","c"),("c","d")我的解决方案是这样的publicstaticIEnumerable>Pairs(IEnumerableenumerable){IEnumeratore=enumerable.GetEnumerator();e.MoveNext();Tcurrent=e.Current;while(e.MoveNext()){Tnext=e.Current;yie