rust - 从向量 Vec<T> 和数据 T 创建新的 Vec<T>

标签 rust immutability

我希望能够创建一个新向量 c: Vec<T>来自a: Vec<T>b: T哪里c等于b附加到a ,不使用可变变量。假设我有这个代码-

fn concat_vec<T>(a: Vec<T>, b: T) -> Vec<T> {
    return Vec::<T>::new(a, b);
}

我知道这不起作用,因为 Vec::new()没有输入参数。我想知道 std::vec 中是否有函数或宏可以从另一个向量初始化一个向量,并附加一组附加值到该向量上。我知道可以很容易地创建一个函数来做到这一点,我只是想知道标准库中是否存在用于处理向量的功能,而它们一开始就不可变。

最佳答案

请注意,您可以使用 tap crate 将 b 推送到计算结果为 a 的表达式中的 a >:

use tap::Tap;

fn concat_vec<T>(a: Vec<T>, b: T) -> Vec<T> {
    a.tap_mut(|a| a.push(b))
}

这结合了 push() 的性能优势(与构建全新的向量相比)和简短表达式的优雅。

关于rust - 从向量 Vec<T> 和数据 T 创建新的 Vec<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73431246/

相关文章:

javascript - 如何不变地更改或更新状态的特定值

unit-testing - 如何在没有模拟的情况下记录/验证单元测试中的方法调用?

java - 具有非最终成员的不可变 Java 类

c++ - Rust 更紧凑的列表初始化?

rust - 如何从常量函数内部打印中间值以进行调试?

json - 如何将 Serde 与包含不同对象的 JSON 数组一起使用以获取成功和错误?

functional-programming - 如何编写不更改状态的应用程序(使用功能语言)?

rust - 如何使指针可散列?

macros - 克服 Rust 宏中的 "local ambiguity: multiple parsing options:"

java - 一个不可变的类成员应该有一个访问方法还是允许公开?