这里写目录标题
常用的集合
Vector
使用vector存储多个值
vector 叫做vector
- 内存连续
创建vector
- Vector::new 函数
- 使用初始值创建Vec 使用vec! 宏
let v:Vec<i32>=Vec::new();
let v =vec![1,2,3];
更新vector
向vector中添加元素,使用push方法
let mut v=Vec::new();
v.push(1);
删除vector
出了作用域自动清理
读取Vector的元素
两种方式可以读取vector中的值:
- 索引
- get方法
- 如果索引超出范围, 使用索引会报错,使用match,会返回null
- 索引:panic
- get:返回none
所有权与借用规则
在同一个作用域内不能同时存在可变借用和不可变借用
遍历vector中的值
不可变的引用可变的引用
使用vector存储不同类型的数据
- enum的变体可以附加不同类型的数据
- enum的变体定义在同一个enum类型下
string类型
rust使用utf-8的编码
字符串
- byte的集合
- rust的核心语言层面,只有一个字符串类型:字符串切片str(或者&str)
- 字符串切片: 对存储在其他地方、utf-8编码的字符串的引用
- 字符串字面值:存储在二进制文件中,也是字符串切片
String的创建
String::new函数
使用初始值来创建String:
- to_string()方法 可用于实现了Display trait的类型,包括字符串字面值
- string::from
更新String
- push_str(),把一个字符串切片附加到String
- push()方法 :把单个字符附加到String
-
- 连接字符串(相当于使用了函数调用),要使用&str
- format! 连接多个字符串
-
format!("{}-{}-{}",s1,s2,s3)
-
返回的是字符串
-
不会取得参数的所有权
对String类型按照索引的形式进行访问
不支持
每个unicode标量值占两个字节
以字节、unicode标量、字形簇的方式看待字符串
字节
unicode标量值
字形簇(最接近字母)
参照crate::io的网站
切割String &字符串名字【0…4】
要按照char的边界进行切割 否则报错
遍历 参照上面以字节看待字符串等
HashMap<K,V>
键值对的形式存储
hash 函数
适用于通过k寻找值
创建
创建空的:new()函数
添加数据: insert()函数
use std::collections::HashMap;
fn main() {
//第一种,显示说明类型
let mut scores:HashMap<String,i32>=HashMap::new();
//第二种,添加数据
let mut Scores=HashMap::new();
Scores.insert(String::from("wanghgdfsjh"), 33333333);
}
特点
数据存储在heap
同构
collect方法创建
在元素类型tuple的vector上使用collect方法,可以组建一个hashmap
要求tuple有两个值,一个作为k,一个作为v
collect方法可以把数据整合成很多种集合类型,包括hashmap
返回值需要显式指明类型
HashMap和所有权
对于实现了copy接口的类型,值会被复制到hashmap中
对于拥有所有权的类型,值会被移动,所有权会转移给Hashmap
field的两个值失效、
如果将值得引用插入到HashMap,值本身不会移动
访问
遍历
更新
- HashMap大小可变
- 每个k只能对应一个v
替代现有得值
插入同样得k,不同得v
只有不存在k时,才插入v
entry方法:检查指得k是否对应一个v
- 参数为K
- 返回enum Entry:代表值是否存在