You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中是否存在等效于JavaScript数组展开运算符的语法?

在Rust中实现类似JavaScript展开运算符的数组合并功能

当然没问题!Rust里完全能实现和JavaScript展开运算符类似的向量/切片合并效果,我给你介绍几种常用的方式,挑适合你的场景用:

1. 使用extend方法修改已有向量

如果你已经有一个向量,想把另一个向量的内容追加进去,extend方法是最直接的选择。它会把传入的可迭代对象的元素逐个添加到原向量末尾:

let x = vec![3, 4];
let mut y = vec![5]; // 需要声明为mut,因为要修改它
y.extend(&x); // 把x的元素追加到y里

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

2. 使用chain生成新向量

如果不想修改原有向量,而是直接生成一个包含合并结果的新向量,可以用迭代器的chain方法,最后用collect转换成向量:

let x = vec![3, 4];
let y: Vec<i32> = vec![5].into_iter()
    .chain(&x) // 把x的迭代器和前面的迭代器链在一起
    .collect(); // 收集成新的Vec

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

这种方式不会影响原有的x和初始的vec![5],适合需要保留原数据的场景。

3. 用vec!宏直接展开(最接近JS语法)

从Rust 1.55版本开始,vec!宏支持用..语法直接展开可迭代对象,这写法和JS的展开运算符几乎一模一样,非常简洁:

// 如果x是数组(固定大小)
let x = [3, 4];
let y = vec![5, ..x];
println!("{:?}", y); // 输出: [5, 3, 4]

// 如果x是Vec(动态大小),不想消费原Vec的话用引用
let x = vec![3, 4];
let y = vec![5, ..&x];
println!("{:?}", y); // 输出: [5, 3, 4]

// 可以消费原Vec的话,直接写..x更简洁(消费后x就不能再用了)
let x = vec![3, 4];
let y = vec![5, ..x];
println!("{:?}", y); // 输出: [5, 3, 4]

这几种方法各有侧重,你可以根据是否需要修改原向量、是否要保留原数据来选择合适的方式。

内容的提问来源于stack exchange,提问作者laptou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:21:20