我有一个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);
