c# – 从IEnumerable中的倒数第二项跳过
发布时间:2020-12-16 01:27:14 所属栏目:百科 来源:网络整理
导读:我有一个IEnumerable(不是List),如下面的列表: A,B,C,D,E 使用下面的命令,我将跳过最后一项(E): items_split.Take(items_split.Count() - 1); //output : A,D 通过以下命令,我将跳过第一项(A): items_split.Skip(1); //output : B,E 我如何跳过列表中的倒
我有一个IEnumerable(不是List),如下面的列表:
A,B,C,D,E 使用下面的命令,我将跳过最后一项(E): items_split.Take(items_split.Count() - 1); //output : A,D 通过以下命令,我将跳过第一项(A): items_split.Skip(1); //output : B,E 我如何跳过列表中的倒数第二项? (期望的结果是A,E) 注意:不是最后一个,而是紧接在最后一个之前. 解决方法
让我们利用items_split是List< T>的事实. – 我们可以使用Count:
var result = items_split .Where((value,index) => index != items_split.Count() - 2); 在一般情况下(当items_split是IEnumerable< T>时,只有Count可能过于昂贵甚至是错误的,例如,如果您查询可在Count之后更改的文件): public static IEnumerable<T> ExcludePenultimate<T>(IEnumerable<T> source) { if (null == source) throw new ArgumentNullException(nameof(source)); Queue<T> queue = new Queue<T>(); foreach (var item in source) { queue.Enqueue(item); if (queue.Count > 2) yield return queue.Dequeue(); } if (queue.Count > 2) yield return queue.Dequeue(); if (queue.Count == 2) queue.Dequeue(); yield return queue.Dequeue(); } 然后 var result = ExcludePenultimate(items_split); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |