加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读