rust zip 函数复制值而不是引用它们

ph2*_*355 1 rust

我想将两个向量压缩在一起,但是调用 zip 函数时得到的是 (&i32, &i32)。我想得到 (i32, i32) - 将两个向量中的值复制到一个新向量中。

let v1 = vec![1,2,3];
let v1 = vec![4,5,6];

// what I want
let zipped : Vec<(i32, i32)> = v1.iter().zip(v2.iter()).collect();

// what I actually get
let zipped : Vec<(&i32, &i32)> = v1.iter().zip(v2.iter()).collect();
Run Code Online (Sandbox Code Playgroud)

是否可以强制 zip 函数复制这些值?

seb*_*etz 5

zip()不会影响您正在迭代的值,它只是在第一个和第二个迭代器值的元组上创建一个迭代器。

如果你想获得拥有的值,你可以使用into_iter()on Vecs。这将消耗向量,因此调用后您将无法再使用它们。如果您需要保留这些向量,可以copied()在实现 的类型上的迭代器上调用一个方法Copy,这就是 的情况i32。所以你可以得到相同的结果,同时将Vecs 保持在 附近v1.iter().copied().zip(v2.iter().copied()).collect()