使用 LINQ 根据特定条件查找列表项在列表中的位置

本文关键字:列表 位置 查找 LINQ 特定条件 使用 | 更新日期: 2023-09-27 18:36:12

类似于linq的东西,在List中找到我的对象在哪个位置,除了他接受的答案是在对象级别进行评估。

说我有

public interface IFoo{
    string text {get;set;}
    int number {get;set;}
}

public class Foo : IFoo{
    public string text {get;set;}
    public int number {get;set;}
}

现在我有一个IFoo的列表集合,如下所示:

public IList<IFoo> Foos;

我想编写一个基于属性值和/或值(例如,在本例中为 textnumber)返回Foos索引的方法,以便我可以执行以下操作:

var fooIndexes = Foos.GetIndexes( f => f.text == "foo" && f.number == 8 );

我怎么写呢?

使用 LINQ 根据特定条件查找列表项在列表中的位置

你可以使用类似的东西:

public static IEnumerable<int> GetIndices<T>(this IEnumerable<T> items, Func<T, bool> predicate)
{
    return items.Select( (item, index) => new { Item = item, Index = index })
                     .Where(p => predicate(p.Item))
                     .Select(p => p.Index);
}

下面是非 LINQ 实现:

public static IEnumerable<int> GetIndexes<T>(this IEnumerable<T> items, 
    Func<T, bool> predicate)
{
    int i = 0;
    foreach (T item in items)
    {
       if (predicate(item))
           yield return i;
       i++;
    }
}

在这种情况下,这可能会更有效,因为它避免了匿名类型初始化。