在 Dartlang 中旋转/移动列表?

问题描述 投票:0回答:3

Dart 中是否有更好/更快的方法来旋转列表?

List<Object> rotate(List<Object> l, int i) {
  i = i % l.length;

  List<Object> x = l.sublist(i);
  x.addAll(l.sublist(0, i));

  return x;
}
dart
3个回答
12
投票

可以简化一点

List<Object> rotate(List<Object> list, int v) {
  if(list == null || list.isEmpty) return list;
  var i = v % list.length;
  return list.sublist(i)..addAll(list.sublist(0, i));
}

1
投票

如果您想要

shift
而不是
rotate
,您可以简单地使用
removeAt
功能:

List<int> list = [ 1, 2, 3 ];
int firstElement = list.removeAt(0);
print(list); // [ 2, 3 ]
print(firstElement); // 1

来自文档:

从此列表中删除位置 [index] 处的对象。

此方法将 this 的长度减少 1,并将后面的所有对象向下移动一个位置。

返回删除的值。

[索引]必须在 0 ≤ 索引范围内 < length. The list must be growable.

这里有一些更有用的 JS shim。


0
投票

您还可以创建一个扩展以在任何地方使用它,并且具有空安全性。

extension RotateList<T> on List<T>{
  List<T> rotate(int rotate){
    if(isEmpty) return this;
    var index = rotate % length;
    return sublist(index)..addAll(sublist(0, index));
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.