gpt4 book ai didi

vector - 在 Rust 中重复向量中元素的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 07:51:54 24 4
gpt4 key购买 nike

我找到了这种方式,但对于这种常见的操作来说似乎太冗长了:

fn double_vec(vec: Vec<i32>) -> Vec<i32> {
let mut vec1 = vec.clone();
let vec2 = vec.clone();

vec1.extend(vec2);

vec1
}

我知道在 JavaScript 中它可能只是 arr2 = [...arr1, ...arr1]

最佳答案

“将矢量加倍”并不是真正经常做的事情,因此没有捷径可走。此外,Vec 里面的内容很重要。因为这会改变可以对其执行的操作。在此特定示例中,以下代码有效:

let x = vec![1, 2, 3];

let y: Vec<_> = x.iter().cycle().take(x.len() * 2).collect();

println!("{:?}", y); //[1, 2, 3, 1, 2, 3]

cycle()方法要求 Iterator 中的项目实现 Clone特征,以​​便可以复制项目。因此,如果您的 Vec 中的项目实现 Clone ,那么这将起作用。由于不可变引用 ( & ) 实现 Clone , 一个 Vec<&Something>将工作但可变引用 ( &mut ) 不实现 Clone因此 Vec<&mut Something>将不起作用。

请注意,即使一个类型没有实现 Clone ,您仍然可以克隆对该类型的引用:

struct Test;

fn test_if_clone<T: Clone>(_x: T) {}

fn main() {
let x = Test;

test_if_clone(x); //error[E0277]: the trait bound `Test: std::clone::Clone` is not satisfied

let y = &x;

test_if_clone(y); //ok
}

关于vector - 在 Rust 中重复向量中元素的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47601097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com