使用linq查找列表中特定项的索引

时间:2010-12-07 07:22:29

标签: c# linq

我有一个从1到20的整数列表。我想要使用linq大于10的项目索引。是否可以使用linq?

提前致谢

2 个答案:

答案 0 :(得分:8)

使用Select的重载,其中包含索引:

var highIndexes = list.Select((value, index) => new { value, index })
                      .Where(z => z.value > 10)
                      .Select(z => z.index);

反过来的步骤:

  • 将值序列投影到值/索引对序列
  • 过滤仅包含值大于10的对
  • 将结果投影到一系列索引

答案 1 :(得分:1)

    public static List<int> FindIndexAll(this List<int> src, Predicate<int> value)
    {
        List<int> res = new List<int>();
        var idx = src.FindIndex(x=>x>10);           
        if (idx!=-1) {
        res.Add(idx);
         while (true)
         {
            idx = src.FindIndex(idx+1, x => x > 10);
            if (idx == -1)
                break;
            res.Add(idx);
         }
        }
        return res;
    }

用法

        List<int>  test= new List<int>() {1,10,5,2334,34,45,4,4,11};
        var t = test.FindIndexAll(x => x > 10);