在IEnumerable 中选择偶数/奇数元素?
可能重复:
使用LINQ获取序列的奇数/偶数部分
如何从List 中获取每个第n项?
我正在使用HtmlAgilityPack和C#来解析一些HTML。
基本上,我有这些元素,每个元素都在自己的对象中,在IEnumerable中。
是否有一种优雅的方式来获取集合中的每个N / 2元素。 意思是,用类.ruler
跳过每个div?
我需要遍历生成的集合,因此要么将每个找到的对象复制到新的IEnumerable中,要么在foreach函数中使用它内联。
例如:
//Copying resulting set to new IEnumerable: var odds = elements.SelectOdds(); //Using it inline for my usage: foreach (var x in elements.SelectOdds()) { }
哪种选择最好,我怎样才能做到这一点?
var odds = sequence.Where((item, index) => index % 2 != 0); var evens = sequence.Where((item, index) => index % 2 == 0);
对于这个解决方案我唯一不喜欢的是,如果你需要几率和平均值,它需要迭代序列两次。 如果由于某种原因你必须避免这种情况,你将不得不更加努力:
var groups = sequence.Select((item, index) => new { Item = item, Index = index }) .GroupBy(x => x.Index % 2 == 0) .ToDictionary(g => g.Key, g => g);
然后,赔率是Key
为false
的groups
元素,而均衡是Key
为true
的groups
元素:
var odds = groups[false]; var evens = groups[true];
您可以为此目的定义自己的扩展方法:
public static class LinqExtensions { public static IEnumerable SelectOdds (this IEnumerable enumerable) { bool odd = false; foreach (var item in enumerable) { if (odd) yield return item; odd = !odd; } } }
Interesting Posts
方法推理不适用于方法组
当绑定属性强制执行某些业务规则时,绑定的WPF TextBox不会更新值
Json.NET在返回json序列化字符串时添加反斜杠
“配置系统无法初始化”的App.Config错误
使用ClientBuildManager.CompileFile进行就地编译
PreApplicationStartMethod实际上何时被触发运行?
在仅适用于.NET-4的系统上的GAC中使用面向.NET-2.0的COM DLL
如何使用Microsoft.Office.Interop.Word创建.docx文档?
如何让UI线程等待信号量,但处理其他调度程序请求? (就像MessageBox.Show本身一样)
CodeContracts:可能在空引用上调用方法