首页 > 解决方案 > 移动列表中的元素?

问题描述

考虑:['A', 'B', 'C']

我想做

list.move("B", -1);
list.move("A", 1);

导致["B", "C", "A"].

是否有某种班轮可以在 Dart 列表中移动项目?显然可以在几行中手动执行此操作,只是好奇是否有一些更简单的方法。

标签: dart

解决方案


线性?我认为没有。无论如何,这里有一个示例代码:

extension on List<String> {
  void move(String element, int shift) {
    if (contains(element)) {
      final curPos = indexOf(element);
      final newPos = curPos + shift;

      if (newPos >= 0 && newPos < length) {
        removeAt(curPos);
        insert(newPos, element);
      }
    }
  }
}

void main(List<String> args) {
  var list = ['A', 'B', 'C', 'D', 'E', 'F'];
  print(list);
  list.move('B', 2);
  print(list);
  list.move('B', -3);
  print(list);
}

结果:

[A, B, C, D, E, F]
[A, C, D, B, E, F]
[B, A, C, D, E, F]

推荐阅读