gpt4 book ai didi

c# - 如何使用 LINQ 查找列表中下一个匹配元素的索引

转载 作者:太空狗 更新时间:2023-10-30 00:49:21 24 4
gpt4 key购买 nike

我有一个列表说:

List<string> list = new List<string>(){"Oracle","SQL Server","Java","Oracle","Python"};

现在我尝试使用 LINQ 从列表中获取第二个“Oracle”的索引:

var indexFirefox = list.FindIndex(a => a.Text == "Oracle");

但这只会为您提供第一个索引为 0 的实例。我希望结果中的索引为 4。将使用 Skip 帮助或有一种更简单的获取索引的方法。上面的例子只是一个演示,我有一个包含 300 多个值的列表。

最佳答案

当已经存在一种方法完成这项工作时,有这么多 Linq 回答(在第一条评论中给出)

List<T>.FindIndex有一个 overload它需要一个额外的索引参数来仅从该索引进行搜索。

因此,要获得第二次出现的项目,您只需使用该重载和“常规”FindIndex 的结果即可.
(注意:在您的问题示例中,您使用了 a.Text,但项目是字符串,因此没有 Text 属性)

var firstIndex = list.FindIndex (item => item == "Oracle");
if (firstIndex != -1)
{
var secondIndex = list.FindIndex (firstIndex, item => item == "Oracle");
// use secondIndex (can be -1 if there is no second occurrence)
}

以及您的示例 secondIndex将是 3 (而不是您问题中所述的 4,索引是从零开始的)

或者,如果您想依次获取出现索引,您可以使用相同的方法循环。

// defined here to not have to repeat it 
Predicate<string> match = item => item == "Oracle";

for (var index = list.FindIndex (match); index > -1; index = list.FindIndex (index + 1, match))
{
// use index here
}

或者如果你更喜欢 while 循环

var index = list.FindIndex (match);

while (index > -1)
{
// use index here

index = list.FindeIndex (index + 1, match);
}

关于c# - 如何使用 LINQ 查找列表中下一个匹配元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38818828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com