当前位置: 首页 > 编程语言 > C#

如何获取Linq-C#列表中的当前项和当前项之后的项?Share

时间:2023-04-11 00:07:25 C#

Linq/C#列表中如何获取当前项和当前项之后的项?我有一个项目列表,如果我选择一个项目,那么我会给出上一个和下一个选项。我已经添加了一个快速代码示例,但我希望有更好/更快的方法来为500个项目执行此操作。也许有一个linq选项之类的?我检查了enumarator,但只有一个moveNext无法设置当前。快速示例:项目是一个字典项目是一个存在于字典中的键值对varmatch=false;varsave=newKeyValuePair();varbefore=newKeyValuePair();varafter=newKeyValuePair();foreach(varpinprojects){before=save;保存=p;如果(匹配){在=p之后;休息;}if(p.Key.Id==project.Key.Id){match=true;LINQ没有内置任何东西,但您可以轻松编写自己的...这是在.NET4中使用元组的实现。它将为最初有n个项目的序列返回n-2个项目-但您可以调整publicIEnumerable>WithNextAndPrevious(thisIEnumerablesource){//实际上产生“前两个”以及当前一个-这个//是比“上一个和下一个”更容易实现,但它们等效于使用(IEnumeratoriterator=source.GetEnumerator()){if(!iterator.MoveNext()){yieldbreak;}TlastButOne=迭代器.Current;如果(!iterator.MoveNext()){yieldbreak;}Tprevious=iterator.Current;while(iterator.MoveNext()){Tcurrent=iterator.Current;yieldreturnTuple.Create(lastButOne,previous,current);lastButOne=前一个;以前的=当前的;请注意,根据LukeH的回答,字典是无序的……但希望以上内容无论如何都会对您有所帮助。您是否尝试过使用IndexOf()和ElementAt()方法?Int32index=list1.IndexOf(item);varitemPrev=list1.ElementAt(index-1);varitemNext=list1.ElementAt(index+1);“当前”之前的项目:items.TakeWhile(x=>x!=current).LastOrDefault();“当前”之后的项目:items.SkipWhile(x=>x!=current).Skip(1).FirstOrDefault();适用于整数类型,但将在序列(T)的末尾返回默认值。将项目转换为Nullable可能很有用,以便在第一个项目之前和最后一个项目之后返回null。字典没有固有的顺序,所以上一项和下一项的想法几乎是荒谬的。我同意关于字典排序的其他评论。但是,由于字典提供了IEnumerable>,因此至少有一个小论据表明它们具有某种顺序。无论如何,这是我的建议:varll=newLinkedList();varqs=frompinprojectsletnode=ll.AddLast(p.Key)selectnew{Project=p,Node=node,};varlookup=qs.ToDictionary(q=>q.Project,q=>q.Node);varcurrent=(ExtendedProjectLightPlan)null;//无论当前是什么。varprevious=lookup[current].Previous.Value;varnext=lookup[current].Next.Value;这应该使从任何项目移动到上一个或下一个项目变得非常简单-而且非常快。(虽然速度应该不是问题,因为这是UI,对吧?)以上是C#学习教程:如何在Linq/C#列表中获取当前和当前之后的项目?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: