生于忧患,咸鱼安乐
Toggle navigation
Home
About Me
Archives
Tags
Rust Digest -- 常见集合
Rust
2021-04-14 14:29:32
317
0
0
squarefong
Rust
# Vector ## 新建vector ```rust let v: Vec<i32> = Vec::new(); let v = vec![1, 2, 3]; ``` ## 修改vector ```rust #![allow(unused)] fn main() { let mut v = Vec::new(); //一定要mut v.push(5); } ``` ## 访问vector元素 ```rust #![allow(unused)] fn main() { let v = vec![1, 2, 3, 4, 5]; let does_not_exist = &v[100]; //直接panic let does_not_exist = v.get(100); //返回 None } ``` 当访问当运行这段代码,你会发现对于第一个 [] 方法,当引用一个不存在的元素时, Rust 会造成 `panic`。当 `get` 方法被传递了一个数组外的索引时,它不会 `panic` 而是返回 `None`。接着你的代码可以有处理 `Some(&element)` 或 `None` 的逻辑。 # 字符串 `String` 的类型是由标准库提供的,而没有写进核心语言部分,它是可增长的、可变的、有所有权的、**UTF-8** 编码的字符串类型。 ## 新建字符串 ```rust //新建一个空的 String let mut s = String::new(); //使用 String::from 函数从字符串字面值创建 String let s = String::from("initial contents"); //使用 to_string 方法从字符串字面值创建 String let data = "initial contents"; let s = data.to_string(); ``` ## 修改字符串 ```rust //使用push_str let mut s = String::from("foo"); s.push_str("bar"); ``` ```rust //使用 + 运算符合并 let s1 = String::from("Hello, "); let s2 = String::from("world!"); let s3 = s1 + &s2; // 注意 s1 被移动了,不能继续使用 ``` ```rust //使用 format! 宏拼接字符串 let s1 = String::from("a"); let s2 = String::from("b"); let s3 = String::from("b"); let s = format!("{}+{}+{}", s1, s2, s3); println!("s1:{}, s2:{}, s3{}, s:{}", s1,s2,s3,s); ``` ## 索引字符串 然而在 Rust 中,如果你尝试使用索引语法访问 String 的一部分,会出现一个错误。错误和提示说明了全部问题:Rust 的字符串**不支持索引**。 ### **内部表现** **String 是一个 Vec<u8> 的封装** ``` let len = String::from("Hola").len(); //len 的值是 4 let len = String::from("Здравствуйте").len(); //len的值是 24,每个 Unicode 标量值需要两个字节存储 ``` # 哈希map `HashMap<K, V>` 类型储存了一个键类型 K 对应一个值类型 V 的映射。它通过一个 哈希函数(hashing function)来实现映射,决定如何将键和值放入内存中。 ## 新建map ```rust use std::collections::HashMap; let mut scores = HashMap::new(); ``` ## 更新map ```rust //直接插入,当key相同,则覆盖 scores.insert(String::from("Blue"), 10); scores.insert(String::from("Yellow"), 50); //只在键没有对应值时插入 scores.entry(String::from("Yellow")).or_insert(50); ``` ## 访问map ```rust // 通过 get 方法并提供对应的键来从哈希 map 中获取值 let score = scores.get("Blue"); if let Some(v) = score { println!("{}", v) } ``` ```rust // 遍历哈希 map 中的每一个键值对 for (key, value) in &scores { println!("{}: {}", key, value); } ```
Pre:
Go更新后GoLand无法调试
Next:
Rust Digest -- 所有权、引用、借用
0
likes
317
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Please enable JavaScript to view the
comments powered by Disqus.
comments powered by
Disqus
Table of content