我试图将向量中的元素向右移动,然后将超出范围的元素放回开始处;向量的旋转。
这是在向量1步骤中移动第一个元素的伪代码。由于向量只有5个元素,因此5
可返回向量的开头:
let V = vec![1, 2, 3, 4, 5];
A = V.move[0].cycle();
A = [5, 1, 2, 3, 4];
这A = V.move[0].cycle();
是我的尝试,但是如果索引超出范围,Rust不会旋转,因此可能很难实现。
在Python中,可以将pop
函数与列表一起使用:
>>>m = [1, 2, 3, 4, 5]
>>>m += [m.pop(0)]
>>>m
[2, 3, 4, 5, 1]
使用for循环,可以将所有元素都移动为[5, 1, 2, 3, 4]
。是否有与pop
Rust中的功能等效的功能?如果有一个将元素全部移到一起的功能,那就更好了。
您正在寻找[T]::rotate_right
和[T]::rotate_left
。范例(Playground):
let mut v = vec![1, 2, 3, 4, 5];
v.rotate_right(1);
println!("{:?}", v);
输出:
[5, 1, 2, 3, 4]
如果发现自己调用rotate_*
的次数很多,则应考虑使用其他数据结构,因为这些方法是线性时间操作。例如,请参阅此答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句