【问题标题】:Retrieving Generic List Item index检索通用列表项索引
【发布时间】:2012-05-02 08:04:03
【问题描述】:

我有一个如下列表。我想检索所有值为 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();

谢谢

问候, 巴兰辛尼亚

【问题讨论】:

    标签: c# linq lambda


    【解决方案1】:

    问题是在最初的Select 子句中,您返回了一个匿名类型。要取回该值,您稍后需要一个额外的Select 来过滤回该值。

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

    【讨论】:

    • 不需要第一个选择。 listFilter.Where(value => value == 1).Select((value, index) => index).ToList() 是一样的。
    • @samjudson 这也是我的第一个想法,但是当我尝试它时,我得到的答案是 0,1 而不是 0,3。问题是 where() 创建了一个只有 2 个条目的新枚举,当我们从 that 中选择索引时,我们得到 0,1。第一个选择它需要从原始列表中捕获索引。
    • 啊,是的,因为 Where 创建了一个新列表,所以第二个索引是第二个列表中的索引,而不是第一个列表中的索引。我的错。
    猜你喜欢
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2014-04-25
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多