Rust - 集合
1、集合(Vector\String\HashMap)
1.1、使用Vector存储多个值
- Vec
,叫做Vector - 由标准库提供
- 可以存储多个值
- 只能存储相同类型的数据
- 值在内存中连续存放
1.2、创建Vector
- Vec::new 函数
- 使用初始值创建Vec
,使用vec!宏(常用方法)
1.3、更新Vector
- 向Vector添加元素,使用pust方法
1.4、删除Vector
- 与任何其他struct一样,当离开作用域后
- 它就被清理了
- 它所有的元素也被清理掉了
1.5、读取Vector的元素
- 两种方式可以引用Vector里的值
- 索引
- get方法
1.6、遍历Vector里的值
- for循环
1.7、String字符串
- 字符串:就是Byte的集合
- Rust的核心语言层面,只有一个字符串类型:字符串切片str(或&str)
- 字符串切片:对存储在其他地方、UTF-8编码的字符串的引用
- 字符串字面值:存储在二进制文件中,也是字符串切片
- String类型
- 来自标准库而不是核心语言
- 可增长、可修改、也拥有所有权
- UTF-8编码
- 其他类型的字符串
- Rust的标准库还包含了很多其它的字符串类型:例如:OsString、OsStr、CString、CStr
- String 和 Str 后缀结尾:拥有或借用的变体
1.8、创建一个新的字符串
- 很多Vec
的操作都可以用于String - 方法一:String::new() 函数
- 方法二:使用初始值创建String
- to_string()方法,可用于实现了Display trait的类型,包括字符串字面值
- String::from函数,从字面值创建
1.9、更新String
-
pust_str()方法:把一个字符串切片附加到String
-
pust()方法:把单个字符附加到String
-
加号(+) : 连接字符串
-
- 使用了类似这个签名的方法 fn add(self,s:&str)->String{}
- 标准库中的ADD方法使用了泛型
- 只能把&str添加到String
- 解引用强制转换
-
fromat!:连接多个字符串
1.10、对String类型按索引的形式进行访问
- 按索引语法访问String会报错
- Rust的字符串不支持索引语法
1.11、HashMap
- HashMap<K,V>
- 键值对的形式存储数据,一个键(Key)对应一个值(Value)
- Hash函数:决定如何在内存中存放K和V
- 标准库对其支持比较少,没有内置的宏来创建HashMap
- HashMap的数据是存放在heap上
- HashMap是同构的,在一个HashMap上
- 所有的K必须是同一种类型
- 所有的V必须是同一种类型
1.12、创建HashMap
1.13、另一种创建HashMap方法:collect方法
- 只能在特定场景使用
- 在元素类型为Tuple的Vector上使用collect,可以组建一个HashMap
- 要求Tuple有两个值:一个作为K,一个作为V
- collect方法可以把数据整合成多种集合类型
1.14、HashMap的所有权
- 对于实现了Copy trait的类型,值会被复制到HashMap中
- 对于拥有所有权的值,值会被移动,所有权会转移给HashMap
- 如果把值的引用插入HashMap,值本身不会移动
1.15、访问HashMap的值
- get方法
- 参数:K
- 返回:Option<&v>
1.16、遍历HashMap
- for循环
1.17、更新HashMap
- HaspMap大小可变
- 每个K同时只能对应一个V
- 更新HashMap中的数据
- K已经存在,对应一个V
- 替换现有的v
- 保留现有的V,忽略新的V
- 合并现有的V和新的V
- K不存在
- 添加一堆K,V
1.18、Hash函数
- 默认情况下,HashMap使用了加密的Hash函数,可以抵抗DOS
- 不是可用的最快的Hash算法
- 但具有更好安全性
- 可以指定不同的Hasher切换到另一个函数