代码之家  ›  专栏  ›  技术社区  ›  DirtyNative

从列表中删除递增数字,然后递减

  •  0
  • DirtyNative  · 技术社区  · 4 年前

    首先,这是一个与飞镖无关的常见问题 语言,但因为Dart需要它,所以我这样标记它。

    我有一个包含递增数字的对象列表

    List<MyObject> myObjectList = [
      MyObject(1),
      MyObject(2),
      ...
      MyObject(10),
    ];
    
    class MyObject {
      int order;
    
      MyObject(this.order);
    }
    

    我现在想从列表中删除一个项目,并减少以下订单号。比方说,我删除了订单号为5的项目,订单号为6、7、8、9和10的项目应该减少一,得到一个列表,如下所示:

    List<MyObject> myObjectList = [
      MyObject(1),
      MyObject(2),
      ...
      MyObject(9),
    ];
    

    这可以通过for循环检查项目编号轻松完成:

    var removedOrder = 5;
    
    for (var item in myObjectList){
      if (item.order > removedOrder) {
        item.order -= 1;
      }
    }
    

    这真的很简单理解,应该有效,但老实说,简单是无聊和丑陋的。 有没有一种方法可以在不需要编写for循环的情况下实现所需的结果? 此外,你对优化逻辑部分有什么建议?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Jan Smitka    4 年前

    一种解决方案是:当你从列表中删除一个位置为5的项目时,你可以取列表中的最后一个项目,并将其值更改为5。这样就不需要遍历所有项目并减少其值。