【问题标题】:Nested list indexes with LINQ使用 LINQ 的嵌套列表索引
【发布时间】:2018-06-25 14:23:50
【问题描述】:

在 LINQ 中这个等价物是什么?

for (int i = 0; i < list2.Count; i++) {
    newList.Add(list1[list2[i]])
}

【问题讨论】:

  • 到目前为止你尝试了什么?
  • newList.AddRange(list2.Select(item =&gt; list1[item]));
  • 您确实意识到“在 Linq 中执行此操作”以及您已经拥有的内容基本上将以(几乎)相同的方式执行相同的操作。那么为什么要“使用 LINQ 执行此操作”?
  • 你为什么在乎?你的代码不起作用吗?你有什么问题吗?无论如何,这样做是 linq 只会让它变得更加复杂和难以阅读——除非你知道它是如何工作的。
  • 谢谢!这是我正在处理的一个非常普遍的操作,与我最初的解决方案相比,Dmitry 的干净解决方案增加了代码的可读性。我关心,因为可读性是一个软件质量指标,我认为每个人都应该关心它。

标签: c# list linq


【解决方案1】:

您可以声明您的 newList 并填充它:

var newList = list2.Select(t => list1[t]).ToList();

或者将数据添加到现有列表中

newList.AddRange(list2.Select(t => list1[t]));

【讨论】:

    【解决方案2】:

    你想获得所有 list2 项目,所以你有一个来自list2Select

     list2.Select(item => ?)
    

    每个item都应该改成list1[list2 item]

     list2.Select(item => list1[item])
    

    最后,您想将整个查询(因此我们应该使用AddRange,而不是Add)添加到newList

     newList.AddRange(list2.Select(item => list1[item]));
    

    如果你真的创建然后填写列表,比如说

     var newList = new List<MyClass>();
    
     newList.AddRange(...);
    

    您可以一次性完成

     var newList = list2
       .Select(item => list1[item])
       .ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 2017-04-18
      • 2017-11-29
      相关资源
      最近更新 更多