使用Linq在集合中的指定元素之后查找元素

Mik*_*ole 14 c# linq

我有一份有序的人员名单.我有一个我认识的人存在于该系列中.如何确定列表中的下一个人?

Ani*_*Ani 29

你可以这样做:

IEnumerable<Person> persons = ..

var firstPersonAfterJack = persons.SkipWhile(p => p.Name != "Jack")
                                  .ElementAt(1); //Zero-indexed, means second
Run Code Online (Sandbox Code Playgroud)

这样做是为了产生导致跳过元素,直至满足条件的序列,然后采取第二元件序列.

如果不能保证查询将返回结果(例如,从未找到匹配,或者是序列的最后一个元素),则可以替换ElementAtElementAtOrDefault,然后执行null-test以检查是否成功.

我注意到你在问题中说你有一个有序的人员名单.如果您能够更详细地解释这意味着什么,我们可能能够提供更好的答案(例如,我们可能不必对序列进行线性搜索).


Try*_*ler 5

SkipWhile是一个采用谓词并跳过所有内容直到谓词为假的方法。它返回该元素以及之后的所有内容。

var remainingPeople = collectionOfPeople.SkipWhile(p => !isThePerson(p));
if (remainingPeople.Count() == 1)
{
    // the person was the last in the list.
}
var nextPerson = remainingPeople.Skip(1).First();
Run Code Online (Sandbox Code Playgroud)

其中isThePerson的方法可以接收一个人,如果您感兴趣的人,则返回true。