Rust 中连接向量的最佳方法是什么?

2024-01-20

是否有可能在 Rust 中连接向量?如果是这样,有没有一种优雅的方式来做到这一点?我有这样的事情:

let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];

for val in &b {
    a.push(val);
}

有谁知道更好的方法吗?


结构std::vec::Vec有方法append() https://doc.rust-lang.org/std/vec/struct.Vec.html#method.append:

fn append(&mut self, other: &mut Vec<T>)

移动所有元素other into Self,离开other empty.

在您的示例中,以下代码将通过以下方式连接两个向量mutating a and b:

fn main() {
    let mut a = vec![1, 2, 3];
    let mut b = vec![4, 5, 6];

    a.append(&mut b);

    assert_eq!(a, [1, 2, 3, 4, 5, 6]);
    assert_eq!(b, []);
}

或者,您可以使用Extend::extend() https://doc.rust-lang.org/std/iter/trait.Extend.html#tymethod.extend附加可以变成迭代器的所有元素(例如Vec) 到给定向量:

let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];

a.extend(b);
assert_eq!(a, [1, 2, 3, 4, 5, 6]);
// b is moved and can't be used anymore

注意向量b被移动而不是被清空。如果您的向量包含实现的元素Copy https://doc.rust-lang.org/stable/std/marker/trait.Copy.html,您可以将对一个向量的不可变引用传递给extend()而是为了避免移动。在这种情况下向量b没有改变:

let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];

a.extend(&b);
assert_eq!(a, [1, 2, 3, 4, 5, 6]);
assert_eq!(b, [4, 5, 6]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust 中连接向量的最佳方法是什么? 的相关文章

随机推荐

  • 为什么 eval 是邪恶的?

    我知道Lisp和Scheme程序员通常会这么说eval除非绝对必要 否则应避免 我已经看到了对几种编程语言的相同建议 但我还没有看到反对使用的明确论据列表eval 在哪里可以找到使用潜在问题的说明eval 例如 我知道以下问题GOTO在过程
  • 卷曲:连接被拒绝

    运行curl时出现以下错误 curl 7 连接127 0 0 1端口8080失败 连接 拒绝了 看起来很容易调试 但是 我没有找到如何解决它 文件中提到了地址127 0 0 1etc hosts 我在Ubuntu系统上使用curl版本7 4
  • 如何从 Sinch 应用仪表板删除上传的 APNS 证书?

    我们正在开发呼叫应用程序使用新奇SDK 我想从 Sinch Dashboard 中创建的应用程序中删除上传的 APNS 证书 我没有找到任何方法来从中删除现有的上传证书 NOTE 现在sinch在App上传的认证附近提供了 删除 选项 No
  • 如何使用java脚本向“go服务器”(go语言)发送json请求并接收json响应

    如何使用java脚本发布json请求并从 go服务器 go语言 接收json响应 我试过这个 JavaScript 代码 var calculate operand1 null operand2 null operator null fun
  • 内核中的地址

    当我在内核中找到地址时 我有一个问题 我在内核中插入一个 hello 模块 在这个模块中 我放置了这些东西 char mystring this is my address printk lt 1 gt The address of mys
  • Momentjs:如何将一个时区的日期/时间转换为 UTC 日期/时间

    我有一个带有时区的日期 时间 并且想将其转换为 UTC const date 2019 04 10T20 30 00Z const zone Asia Kuala Lumpur const utcDate moment date tz zo
  • 在 MATLAB 中拆分数组

    我有一个整数数组 我想在 0 出现的地方分割这个数组 并有一个函数给我分割点 示例 数组 0 0 0 1 2 4 5 6 6 0 0 0 0 0 22 4 5 6 6 0 0 0 4 4 0 该函数必须返回这些数字 3 10 14 20 2
  • 通过求和来聚合重复行

    根据我的问题 1 识别一组变量是否唯一标识数据的每一行 https stackoverflow com q 22834725 1414455 2 根据给定的变量集标记所有重复的行 https stackoverflow com q 2289
  • CMake 源代码中大小写一致性的工具

    CMake 命令在小写 大写和混合大小写下均有效 然而 将所有这些内容混合在一个文件中会降低 CMake 代码的可读性 有没有一种工具可以自动纠正这种风格不一致的情况 steveire 的答案链接到正确的资源 但让我明确解释一下 以防这些链
  • 关于 sbrk() 和 malloc()

    我已经彻底阅读了有关 sbrk 的 linux 手册 sbrk 改变程序中断的位置 它定义了结束 进程的数据段 即程序中断是第一个 未初始化数据段末尾之后的位置 And I do know that user space memory s
  • 如何刷新 WinForms DataGridView 上的数据源?

    我从 EntityFramework 模型填充 GridView DataSource gwTimeLog DataSource entities TimeLogs 当新行添加到 entities 时 我尝试更新网格 尝试使用与上面相同的语
  • Microsoft Sync Framework 还存在吗?

    根据MS文档Sync Framework Toolkit https code msdn microsoft com Sync Framework Toolkit 4dc10f0e https code msdn microsoft com
  • NSWindowController 与 NSViewController 之间的区别

    我来自iOS背景并开始学习Cocoa 在iOS除非我们有多个目标iPad and iPhone我们通常有一窗并使用管理屏幕UIViewControllers 每个新屏幕大多数时候都会映射到UIViewController 然而 在可可中 这
  • Treeset.contains() 问题

    所以我已经被一个问题困扰了一段时间 我想我不妨在这里寻求帮助 我将 Ticket 对象添加到 TreeSet Ticket 实现 Comparable 并重写 equals hashCode 和 CompareTo 方法 我需要使用 con
  • 古怪的 __set() 魔术函数

    谁能向我解释一下这种行为的逻辑吗 考虑以下情况 class EPPDomain protected myField public static function buildEPPDomain fieldValue me new self m
  • Select2:未捕获类型错误:options.results 不是函数

    我正在尝试使用 Select2 jquery 插件进行 AJAX 调用 查询似乎有效 但问题发生在 results 被称为options object Uncaught TypeError options results is not a
  • 默认变量值

    如果我在声明变量时没有为其赋值 那么它是否默认为零或只是内存中先前的值 e g float x 声明的变量可以是零初始化 值初始化 or 默认初始化 C 03 标准 8 5 5 恰当地定义了以下各项 To 零初始化T 类型的对象意味着 如果
  • 使用SimpleXmlElement和symfony2输出xml文件

    rootNode new SimpleXMLElement
  • OpenMP 如何重用线程

    我认为线程的创建和删除可能代价高昂 OpenMP 是否尝试重用现有线程 例如 pragma omp parallel sections num threads 4 pragma omp section worker A pragma omp
  • Rust 中连接向量的最佳方法是什么?

    是否有可能在 Rust 中连接向量 如果是这样 有没有一种优雅的方式来做到这一点 我有这样的事情 let mut a vec 1 2 3 let b vec 4 5 6 for val in b a push val 有谁知道更好的方法吗