厦门人才网唯一官方网站登录入口html电影网站模板
news/
2025/9/23 4:02:33/
文章来源:
厦门人才网唯一官方网站登录入口,html电影网站模板,济南市扬尘治理官网,商丘网站优化公司8.3.0. 本章内容
第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构#xff0c;这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。
第八章中的集合是存储在堆内存上而非栈内存上的#xff0c;这也意味着这些集合的数据大小无需在编…8.3.0. 本章内容
第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。
第八章中的集合是存储在堆内存上而非栈内存上的这也意味着这些集合的数据大小无需在编译时就确定在运行时它们可以动态地变大或变小。
本章主要会讲三种集合Vector、String本文 和HashMap
喜欢的话别忘了点赞、收藏加关注哦加关注即可阅读全文对接下来的教程有兴趣的可以关注专栏。谢谢喵(ω)
8.3.1. String对开发者造成的困扰
Rust开发者尤其是新手会经常被字符串困扰原因如下
Rust倾向于暴露可能的错误字符串数据结构复杂Rust字符串使用了UTF-8编码
8.3.2. 字符串是什么
字符串是基于字节(Byte)的集合并且它提供了一些方法这些方法能将字节解析为文本。
在Rust的核心语言层面只有一个字符串类型——字符串切片str通常是以借用的情况出现的也就是str。
字符串切片是对存储在其他地方、utf-8编码的字符串的引用。例如字符串字面值就是直接存储在Rust的二进制文件中所以它也是一种字符串切片。
String类型来自于标准库而不是核心语言。它是一种可增长、可修改、可拥有获得所有权的类型它也采用utf-8编码。
8.3.3. 字符串到底是指谁
通常说的字符串就是指String和str这两种类型而不是其中的一种。这两种类型在标准库里都用的非常频繁也都是使用了utf-8编码但这里主要还是讲String类型因为它更复杂。
8.3.4. 其他的字符串类型
Rust标准库还提供了其他的字符串类型例如OsString、OsStr、CString、CStr。但是注意这些类型都是以String或者是Str结尾这就跟之前讲的String和字符串切片这两种类型的写法又一些关系。
通常来说以String结尾的字符串类型是可以获得所有权的以Str结尾的类型通常是指可借用 的。
这些不同的字符串类型可以存储不同编码的文本或是在内存中以不同的形式展现(布局不一样)。
某些library crate针对字符串可提供更多的选项这里就不介绍了。
8.3.5. 创建一个新的字符串(String)
由于String类型的本质是字节的集合所以很多VecT的操作都可以用于String。
String::new()可以用来创建一个空的字符串。看个例子
fn main(){let mut s String::new();
}但是一般而言都是使用初始值来创建String。这个时候就可以使用to_string方法来创建String这个方法可用于实现了Display trait的类型包括字符串字面值。如下例
fn main() { let data wjq; let s data.to_string(); let s1 wjq.to_string();
}data是一个字符串字面值而使用to_string这个方法把它转为String类型存储在s里。或者也可以直接写字符串字面值然后写.to_string()也就是给s1赋值的操作。这两个操作是同样的效果。
to_string也不是唯一的方法第二种方法是使用String::from函数。如下例
let s String::from(wjq);这个函数和to_string方法的效果是一样的。
由于字符串它用的地方非常多所以Rust提供了很多不同的通用API供我们选择有些函数可能看着很多余但实际上它们都有各自的用处。而在实际编码时可以根据喜好来选择。
8.3.6. 更新String
之前提到了String类型的大小是可以增减的其本质是字节的集合里面的内容也可以修改它的操作就跟Vector一样此外还可以对String进行拼接。
1. push_str()
首先讲push_str()它是一个把字符串切片附加到String的方法。如下例
fn main() { let mut s String::from(6657); s.push_str(up up); println!({}, s);
}输出
6657up uppush_str的签名是push_str(mut self, string:str)它的参数类型是借用的这个字符串切片而字符串字面值就是切片所以up up可以传进去并且这个方法不会获得参数的所有权所以传进去的参数不会失效还能继续使用。
2. push
第二个方法叫push()它能把单个字符附加到String里面。如下例
fn main() { let mut s String::from(665); s.push(7); println!({}, s);
}注意字符得使用单引号。
输出
66573.
Rust允许使用来拼接字符串。如下例
fn main() { let s1 String::from(6657); let s2 String::from(up up); let s3 s1 s2; println!({}, s3);
}注意加号前是字符串类型加号后得是字符串切片类型。
但在这个例子中实际上加号后的数据类型是String而不是str。这时因为这里Rust使用了解引用强制转换deref coercion 的功能把String类型强制转换为str。
当然因为s2传进去的是引用所以s2在拼接后是仍然有效的而s1是把本身的所有权交给了s3所以s1在拼接后就无效了。
输出
6657up up4. format!
format!这个宏可以更加灵活的拼接字符串。如下例
fn main() { let s1 String::from(cn); let s2 String::from(Niko); let s3 String::from(fan club); let s format!({} {} {}, s1, s2, s3); println!({}, s);
}使用占位符来代替变量这点和println!很像println!是把结果进行输出而format!则是返回了拼接好的字符串。
输出
cn Niko fan club当然使用也能实现一样的效果只不过写起来稍微麻烦一些
fn main() { let s1 String::from(cn); let s2 String::from(Niko); let s3 String::from(fan club); let s s1 s2 s3; println!({}, s);
}format!最好的一点是它不会取得任何参数的所有权这些参数在后续都可以继续使用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911303.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!