【问题标题】:Get the next object in list after the object with current ID获取具有当前 ID 的对象之后的列表中的下一个对象
【发布时间】:2015-01-15 18:37:56
【问题描述】:

我知道标题很混乱,所以我会尽力在这里解释......

我有

class T{
   int id;
   string value;
}


List<T> objs;

在我的代码中,当我检索初始列表时,我使用

获取第一个 id
int currentID = objs.FirstOrDefault().id;

现在我需要抓住下一个。不知道我当前所在的位置如何获取下一个项目 id...

 objs.select(x => x.id)
        .where(//you are the object that exists after the one with currentID);

【问题讨论】:

  • 第一个之后存在的对象将只是第二个 (objs[1]),对吗?还是我遗漏了一些细节?您是说您想要具有 不同 id 的第一个对象吗?
  • @DStanley id 可以是随机的,并且以任何顺序,它们在内部按不同的属性排序,然后根据条件删除随机的属性,留下一个说 id 的列表(1,57, 12,417,3)
  • 所以你的“第一个”id 是 1 而你的“下一个”id 是 57?还是 3 个?
  • @DStanley 是的,集合中的每个对象都有一个存储在其中的优先级。 ID 只是用于数据库引用的对象的 ID(唯一标识符)优先级是排序依据,

标签: c# linq linq-to-objects


【解决方案1】:

如果你想在某个元素之后获取下一个元素,那么你可以使用 SkipWhile()Skip() 这样的方法:

objs.SkipWhile(x => x.id == currentID).Skip(1).FirstOrDefault();

【讨论】:

  • "x => x.id" 不一定会解析为布尔值。你可以投射,但这可能不会给你预期的结果。
【解决方案2】:

你只是索引,所以使用ElementAt

int i = 0; //current position
int currentID = objs.ElementAt(i).id;
i++;

循环执行获取下一个等

如果您实际上只是想遍历所有元素,只需使用foreach

foreach (T obj in objs)
{
   int currentID = obj.id;
}

最后,您可以使用GetEnumerator 并将MoveNext 函数与Current 属性一起使用。这基本上是使用foreach,但自己控制迭代。

【讨论】:

    猜你喜欢
    • 2015-03-08
    • 2018-04-13
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多