【问题标题】:Getting indexes of all matching items [duplicate]获取所有匹配项的索引[重复]
【发布时间】:2013-04-09 15:02:55
【问题描述】:

我想获取一个可枚举中所有符合给定条件的项目的索引。还有比这更干净的方法吗?

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

【问题讨论】:

标签: c# linq


【解决方案1】:

使用标准 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++;
    }
}

【讨论】:

  • 鉴于我已经有了一个相当广泛的扩展库,我喜欢这个解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-10-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
相关资源
最近更新 更多