我的编程空间,编程开发者的网络收藏夹
学习永远不晚

rust的vector和hashmap怎么创建

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

rust的vector和hashmap怎么创建

今天小编给大家分享一下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怎么创建”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    rust的vector和hashmap怎么创建

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    rust的vector和hashmap怎么创建

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

    rust的vector和hashmap详解

    这篇文章主要介绍了rust的vector和hashmap,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-19

    C++怎么创建vector容器

    这篇文章主要介绍“C++怎么创建vector容器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++怎么创建vector容器”文章能帮助大家解决问题。vector基本概念功能:vector数据结构和
    2023-07-02

    怎么使用Rust+React创建富文本编辑器

    这篇文章主要介绍“怎么使用Rust+React创建富文本编辑器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Rust+React创建富文本编辑器”文章能帮助大家解决问题。数据模型我们的产品是
    2023-07-02

    怎么创建SparkSession和sparkSQL

    这篇文章给大家分享的是有关怎么创建SparkSession和sparkSQL的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、概述spark 有三大引擎,spark core、sparkSQL、sparkStre
    2023-06-20

    hadoop hdfs和MapReduce怎么创建

    本篇内容主要讲解“hadoop hdfs和MapReduce怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hadoop hdfs和MapReduce怎么创建”吧!大致步骤如下:新建一个文
    2023-06-02

    Python的列表怎么创建和删除

    这篇文章主要讲解了“Python的列表怎么创建和删除”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的列表怎么创建和删除”吧!1.列表定义:形式上,列表的所有元素都放在一对中括号"
    2023-06-26

    java ThreadLocal怎么创建和访问

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

    linux怎么创建用户和组

    本篇内容主要讲解“linux怎么创建用户和组”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux怎么创建用户和组”吧!linux下有三类用户: 1、超级用户 :root 具有操作系通的一切
    2023-06-13

    MySQL索引怎么创建和删除

    这篇文章主要介绍了MySQL索引怎么创建和删除的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL索引怎么创建和删除文章都会有所收获,下面我们一起来看看吧。MySQL Index索引是一种数据结构,可以是B
    2023-07-05

    Java怎么创建和销毁对象

    这篇文章主要介绍了Java怎么创建和销毁对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么创建和销毁对象文章都会有所收获,下面我们一起来看看吧。一、介绍Java由Sun Microsystems发明
    2023-07-04

    使用Flow和IPFS怎么创建NFT

    今天就跟大家聊聊有关使用Flow和IPFS怎么创建NFT,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。苹果系统:brew install flow-cliLinux:sh -ci “
    2023-06-15

    oracle序列怎么创建和使用

    在Oracle数据库中,序列(Sequence)是一种生成唯一数字的对象,可以用于自动生成主键值或其他需要唯一数字的场景。以下是创建和使用Oracle序列的步骤:1. 创建序列:```CREATE SEQUENCE sequence_nam
    2023-09-23

    mysql索引怎么创建和使用

    MySQL索引是用于加快查询速度的一种数据结构,可以提高查询效率。下面是创建和使用MySQL索引的步骤:1. 创建索引: - 使用CREATE INDEX语句创建索引。语法如下: ```sql CREATE INDEX ind
    mysql索引怎么创建和使用
    2024-02-29

    怎么创建和连接数据库

    这篇文章主要介绍“怎么创建和连接数据库”,在日常操作中,相信很多人在怎么创建和连接数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么创建和连接数据库”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!创建
    2023-06-08

    C++线程怎么创建和管理

    C++中创建和管理线程的主要方式是使用std::thread类。以下是创建和管理线程的基本步骤:包含头文件:首先需要包含头文件。创建线程:使用std::thread类的构造函数创建线程。构造函数接受一个可调用的对象作为参数,可以是函数、函数
    2023-10-26

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录