c# - 获取所有匹配项的索引

标签 c# linq

<分区>

我想获取可枚举中与给定条件匹配的所有项目的索引。还有比这更清洁的方法吗?

var indexes = list.Select((item, index) => new { Item = item, Index = index }).Where(o => Condition(o.Item)).Select(o => o.Index);

最佳答案

使用标准的 LINQ to Object 方法 - 不,没有。您只能通过将查询分成几行来提高可读性:

var indexes = list.Select((item, index) => new { Item = item, Index = index })
                  .Where(o => Condition(o.Item))
                  .Select(o => o.Index);

但是,您可以为此编写一个扩展方法:

public static IEnumerable<int> IndexesWhere<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
    int index=0;
    foreach (T element in source)
    {
        if (predicate(element))
        {
            yield return index;
        }
        index++;
    }
}

关于c# - 获取所有匹配项的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15905515/

相关文章:

c# - 从 linq 语句中调用函数

c# - 跨进程连接匿名管道会出现无效句柄错误,我正在使用 System.Io.Pipes

c# - 如何将文本从动态生成的用户控件传输到文本框

c# - 具有相同对象名称的两个命名空间

c# - 如何将此 SQL 查询转换为 EF Core 中的 LINQ 查询?

c# - ProjectTo 不识别无参数构造函数

c# - 将第二组按键字段添加到现有的 Lambda 表达式

c# - 将摩尔斯电码解码为文本

c# - 如何使用 GetFolderPath 获取自定义文件夹路径?

javascript - 在 Typescript 中将表达式作为过滤器函数的参数传递