返回顶部
首页 > 资讯 > 精选 >rust的vector和hashmap怎么创建
  • 795
分享到

rust的vector和hashmap怎么创建

2023-07-05 13:07:25 795人浏览 独家记忆
摘要

今天小编给大家分享一下rust的vector和HashMap怎么创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。动态数组V

今天小编给大家分享一下rust的vector和HashMap怎么创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    动态数组Vector

    在大多数语言中都会提供动态数组这样基础的数据结构。rust也不例外。动态数组允许我们存储多个值,这些值在内存中一个紧挨着另一个排列。动态数组中只能存储相同类型的元素。

    创建动态数组

    使用Vec::new()创建动态数组或者是使用宏vec![]创建数组。例如:

    fn main() {    let mut a = Vec::new();    a.push(1);    let b = vec![1];    println!("a:{}", a[0]);    println!("b:{}", b[0]);}

    rust的编译器非常智能,它通过a.push(1)推断出了a的类型是Vec<i32>如果预先知道要存储的元素个数,可以使用 Vec::with_capacity(capacity) 创建动态数组,这样可以避免因为插入大量新数据导致频繁的内存分配和拷贝,提升性能。而通过宏vec![]创建动态数组可在创建同时给予初始化值。还有一点需要注意,上例中的a是可变变量,而b是不可变变量。因此无法使用b.push来追加元素。

    向数组末尾追加元素

    使用push方法可以向数组末尾增加元素。需要确保数组变量是可变变量。例如:

    let mut a = Vec::new();a.push(1);

    从Vector中读取元素

    读取指定位置的元素有两种方式可选:

    • 通过下标索引访问,直接获取元素值

    • 使用 get 方法,获取到Option<&T>

    一个实际的例子如下所示:

    #![allow(unused)]fn main() {let v = vec![1, 2, 3, 4, 5];let third: &i32 = &v[2];println!("第三个元素是 {}", third);match v.get(2) {        Some(third) => println!("第三个元素是 {third}"),        None => println!("去你的第三个元素,根本没有!"),    }}

    和其它语言一样,集合类型的索引下标都是从 0 开始,&v[2] 表示借用 v 中的第三个元素。如果存在下标越界的可能,那么建议使用get来获取元素,否则还是使用下标的方式会更好。

    重提内存安全

    让我们首先来回顾一下rust的所有权系统以及引用(借用)。

    所有权系统
    • Rust 中的每一个值都有一个 所有者(owner)。

    • 值在任一时刻有且只有一个所有者。

    • 当所有者(变量)离开作用域,这个值将被丢弃。

    引用规则
    • 同一作用域,一个变量只能有一个可变引用;

    • 在同一作用域,一个变量可以有多个不可变引用,不允许同时存在可变引用和不可变引用。

    现在,让我们直接看下面这段代码。

    rust的vector和hashmap怎么创建

    hashmap

    rust标准库提供了hashmap,和其它语言的hashmap, map, object, dict等类似。

    创建hashmap

    use std::collections::HashMap;fn main() {    // 创建一个HashMap,用于存储宝石种类和对应的数量    let mut my_gems = HashMap::new();}

    HashMap 并没有包含在 Rust 的 prelude 中,因此需要使用use来引入hashmap。通过new来创建一个hashmap。也可以有其它的方式来创建hashmap。例如:

    let target = [("A", 1), ("B", 2), ("C", 5), ("D", 8)];let target = HashMap::from(target);println!("{:?}", target);

    新增键值对

    使用insert方法即可新增键值对。例如:

    // 将宝石类型和对应的数量写入表中my_gems.insert("红宝石", 1);my_gems.insert("蓝宝石", 2);my_gems.insert("河边捡的误以为是宝石的破石头", 18);

    需要注意的是 HashMap 也是内聚性的,即所有的 K 必须拥有同样的类型,V 也是如此。跟 Vec 一样,如果预先知道要存储的 KV 对个数,可以使用 HashMap::with_capacity(capacity) 创建指定大小的 HashMap,避免频繁的内存分配和拷贝,提升性能。

    根据键查询值

    可以通过get方法来根据键名查询值,不过get方法返回的是Option<&T>类型,需要使用unwrap来解析。例如:

    println!("{:?}", my_gems.get("红宝石").unwrap());

    同时在for循环中,可以更方便的遍历hashmap,例如:

    for (k, v) in my_gems {    println!("key is {k}, value is {v}");}

    更新hashmap中的值

    fn main() {    use std::collections::HashMap;    let mut scores = HashMap::new();    scores.insert("Blue", 10);    // 覆盖已有的值    let old = scores.insert("Blue", 20);    assert_eq!(old, Some(10));    // 查询新插入的值    let new = scores.get("Blue");    assert_eq!(new, Some(&20));    // 查询Yellow对应的值,若不存在则插入新值    let v = scores.entry("Yellow").or_insert(5);    assert_eq!(*v, 5); // 不存在,插入5    // 查询Yellow对应的值,若不存在则插入新值    let v = scores.entry("Yellow").or_insert(50);    assert_eq!(*v, 5); // 已经存在,因此50没有插入}

    hashmap提供了两个方法,其中insert方法在没有键值对的情况会进行插入,有键值对的情况下进行覆盖;而or_insert方法在没有键值对的情况下进行插入,有键值对的情况下不插入。

    根据键删除hashmap的键值对

    scores.remove("Blue");

    使用remove方法即可根据键删除值。

    以上就是“rust的vector和hashmap怎么创建”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: rust的vector和hashmap怎么创建

    本文链接: https://lsjlt.com/news/351955.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • rust的vector和hashmap怎么创建
      今天小编给大家分享一下rust的vector和hashmap怎么创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。动态数组V...
      99+
      2023-07-05
    • rust的vector和hashmap详解
      目录动态数组Vector创建动态数组向数组末尾追加元素重提内存安全所有权系统引用规则hashmap创建hashmap新增键值对根据键查询值根据键删除hashmap的键值对动态数组Ve...
      99+
      2023-03-19
      rust的vector和hashmap rust的vector rust hashmap
    • C++怎么创建vector容器
      这篇文章主要介绍“C++怎么创建vector容器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++怎么创建vector容器”文章能帮助大家解决问题。vector基本概念功能:vector数据结构和...
      99+
      2023-07-02
    • Rust语言中的String和HashMap使用示例详解
      目录String新建字符串更新字符串使用 + 运算符或 format! 宏拼接字符串索引字符串字符串 slice遍历字符串HashMap新建 HashMapHashMap 和 own...
      99+
      2022-11-13
      Rust String HashMap使用 Rust String HashMap
    • 怎么使用Rust+React创建富文本编辑器
      这篇文章主要介绍“怎么使用Rust+React创建富文本编辑器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Rust+React创建富文本编辑器”文章能帮助大家解决问题。数据模型我们的产品是...
      99+
      2023-07-02
    • 怎么比较HashMap和TreeMap
      这期内容当中小编将会给大家带来有关怎么比较HashMap和TreeMap,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.AbstractMap抽象类和SortedMap接口AbstractMap抽象类:...
      99+
      2023-06-17
    • 怎么创建SparkSession和sparkSQL
      这篇文章给大家分享的是有关怎么创建SparkSession和sparkSQL的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、概述spark 有三大引擎,spark core、sparkSQL、sparkStre...
      99+
      2023-06-20
    • hadoop hdfs和MapReduce怎么创建
      本篇内容主要讲解“hadoop hdfs和MapReduce怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hadoop hdfs和MapReduce怎么创建”吧!大致步骤如下:新建一个文...
      99+
      2023-06-02
    • Python的列表怎么创建和删除
      这篇文章主要讲解了“Python的列表怎么创建和删除”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的列表怎么创建和删除”吧!1.列表定义:形式上,列表的所有元素都放在一对中括号&...
      99+
      2023-06-26
    • c++利用vector创建二维数组的几种方法总结
      目录用vector创建二维数组的几种方法方法一方法二:一维扩充法 vector定义二维数组的输入和输出用vector创建二维数组的几种方法 方法一 #include <...
      99+
      2022-11-13
      c++ vector vector创建二维数组 c++二维数组
    • Vector和Stack怎么在JAVA 中使用
      这篇文章将为大家详细讲解有关Vector和Stack怎么在JAVA 中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、Vector&Stack的基本介绍和使用我们先看下JDK种...
      99+
      2023-05-30
      java vector stack
    • JavaScript怎么创建类和对象
      这篇文章主要介绍了JavaScript怎么创建类和对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript怎么创建类和对象文章都会有所收获,下面我们一起来看看吧。...
      99+
      2024-04-02
    • linux怎么创建用户和组
      本篇内容主要讲解“linux怎么创建用户和组”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux怎么创建用户和组”吧!linux下有三类用户:  1、超级用户 :root 具有操作...
      99+
      2023-06-13
    • java ThreadLocal怎么创建和访问
      今天小编给大家分享一下java ThreadLocal怎么创建和访问的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、创建,...
      99+
      2023-06-30
    • 怎么创建和调用Python中的函数
      创建函数函数用 def 语句创建,语法如下:def 函数名(参数列表): # 具体情况具体对待,参数可有可无 """函数说明文档字符串""" ...
      99+
      2023-05-20
      Python
    • 使用sqlplus怎么创建DDL和DML
      本篇文章给大家分享的是有关使用sqlplus怎么创建DDL和DML,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.连接数据库 在w...
      99+
      2024-04-02
    • Oracle中怎么创建和管理表
      这篇文章给大家介绍Oracle中怎么创建和管理表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Oracle创建表及管理表1. 表的创建及管理    创建表包括三个要...
      99+
      2024-04-02
    • 怎么创建和连接数据库
      这篇文章主要介绍“怎么创建和连接数据库”,在日常操作中,相信很多人在怎么创建和连接数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么创建和连接数据库”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!创建...
      99+
      2023-06-08
    • 使用Flow和IPFS怎么创建NFT
      今天就跟大家聊聊有关使用Flow和IPFS怎么创建NFT,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。苹果系统:brew install flow-cliLinu...
      99+
      2023-06-15
    • oracle序列怎么创建和使用
      在Oracle数据库中,序列(Sequence)是一种生成唯一数字的对象,可以用于自动生成主键值或其他需要唯一数字的场景。以下是创建...
      99+
      2023-09-23
      oracle
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作