【问题标题】:How to iterate through a field list in a list of objects [duplicate]如何遍历对象列表中的字段列表[重复]
【发布时间】:2020-12-20 02:50:29
【问题描述】:

我真的不知道如何表达这个问题,所以我将用一种更简单或更快的方式解释我正在尝试做什么。

我有一个名为GearBoxInfo 的类,用于存储变速箱的各种属性。在GearBoxInfo 内部是一个名为GearSets 的字段,其类型为List<GearSet>GearSet 类有一个名为 Gears 的字段,其类型为 List<Gear>

我正在尝试遍历GearBoxInfo 中的每个Gear,但为此我还需要遍历GearBoxInfo 中的每个GearSet,如下所示:

for (var i = 0; i < gearBoxInfo.GearSets.Count; i++) {
    for (var j = 0; j < gearBoxInfo.GearSets[i].Gears.Count; i++) {
        Gear g = gearBoxInfo.GearSets[i].Gears[j];
        /* ... */
    }
}

我想知道是否有更有效的方法来执行此操作(例如某些 LINQ 函数),因为嵌套循环可能需要很长时间。将来,我可能需要遍历 Gear 的字段,例如,这将需要另一个嵌套循环。

【问题讨论】:

    标签: c# list linq loops


    【解决方案1】:

    SelectMany 正是您所追求的,它将集合扁平化为一个序列:

    var gears = gearBoxInfo.GearSets.SelectMany(gs=>gs.Gears);
    

    更多例子here

    【讨论】:

      【解决方案2】:

      我不确定你为什么需要循环。您是否需要出于特定原因遍历每个齿轮,或者您是否正在寻找特定的齿轮?如果您正在寻找特定的装备,您可以使用 .Find() 或 .First() 方法。

      for (var i = 0; i < gearBoxInfo.GearSets.Count; i++) {
          Gear g = gearBoxInfo.GearSets.First(f => f == "XYZ123");
          /* ... */
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 2023-03-04
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多