JavaScript的spread运算符的Rust等价物是什么?

wsxa1bj1  于 2022-11-12  发布在  Java
关注(0)|答案(3)|浏览(130)

在JavaScript中,有一个称为spread运算符的运算符,它允许您非常简洁地合并数组。

let x = [3, 4];
let y = [5, ...x]; // y is [5, 3, 4]

在拉斯特有没有办法做这样的事情?

kcrjzv8t

kcrjzv8t1#

如果你只需要y是可迭代的,你可以这样做:

let x = [3,4];
let y = [5].iter().chain(&x);

如果你需要它是可索引的,那么你需要把它收集到一个向量中。

let y: Vec<_> = [5].iter().chain(&x).map(|&x|x).collect();
9w11ddsr

9w11ddsr2#

Rust's arrays have a fixed length,因此无法将它们组合在一起;实现该结果通常方式是具有可变向量并利用切片来扩展它:

fn main() {
    let x = [3, 4];
    let mut y = vec![5];
    y.extend_from_slice(&x);

    println!("{:?}", y); // [5, 3, 4]
}
ddrv8njm

ddrv8njm3#

您可以使用[T]::concat从任意多个片段构建一个Vec

let x = [3, 4];
let y = [&[5], &x[..]].concat();
// gives vec![5, 3, 4]

相关问题