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;
}
可以简化一点
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));
}
如果您想要
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。
您还可以创建一个扩展以在任何地方使用它,并且具有空安全性。
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));
}
}