我有一个IEnumerable(不是List),如下面的列表: A,B,C,D,E 使用下面的命令,我将跳过最后一项(E): items_split.Take(items_split.Count() - 1); //output : A,B,C,D 通过以下命令,我将跳过第一项(A): items_spli
A,B,C,D,E
使用下面的命令,我将跳过最后一项(E):
items_split.Take(items_split.Count() - 1); //output : A,B,C,D
通过以下命令,我将跳过第一项(A):
items_split.Skip(1); //output : B,C,D,E
我如何跳过列表中的倒数第二项? (期望的结果是A,B,C,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);