使用 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;
我想编写一个基于属性值和/或值(例如,在本例中为 text
或 number
)返回Foos
索引的方法,以便我可以执行以下操作:
var fooIndexes = Foos.GetIndexes( f => f.text == "foo" && f.number == 8 );
我怎么写呢?
你可以使用类似的东西:
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++;
}
}
在这种情况下,这可能会更有效,因为它避免了匿名类型初始化。