2012-05-02 137 views
0

我有一个列表如下。我想检索所有具有值1检索通用列表项目索引

 List<int> listFilter = new List<int>(); 

     listFilter.Add(1); 
     listFilter.Add(0); 
     listFilter.Add(0); 
     listFilter.Add(1); 

我应该为样本数据上面越来越0和3项的指标。

下面的代码给了我一个[value,index]对的对象。我如何修改它只输出一个只有索引的列表。

 var val = listFilter.Select((value, index) => new { Value = value, Index = index }).Where(item => item.Value == 1).ToList(); 

感谢

问候, 巴兰Sinniah

回答

3

的问题是,初始Select子句中你返回一个匿名类型。为了恢复以后需要额外输入Select的值以过滤回该值。

var val = listFilter 
    .Select((value, index) => new { Value = value, Index = index }) 
    .Where(item => item.Value == 1) 
    .Select(item => item.Index) 
    .ToList(); 
+0

工作很好..感谢 – balan

+0

第一个选择是不需要的。 listFilter.Where(value => value == 1).Select((value,index)=> index).ToList()是相同的。 – samjudson

+0

@samjudson这也是我的第一个想法,但当我尝试了它,我得到0,1作为答案不是0,3。问题是where()创建一个只有2个条目的新枚举,当我们从*选择索引*时,我们得到0,1。第一个选择需要从原始列表中捕获索引。 – AlanT