Rust集合类型解析:Vector、String、HashMapRust作为一门兼顾性能与内存安全的系统编程语言,其标准库中的集合类型为开发者提供了高效的数据管理工具。本文聚焦Rust中三种核心集合类型——Vector、String和HashMap,通过详细讲解和代码示例,剖析它们的基
Rust 作为一门兼顾性能与内存安全的系统编程语言,其标准库中的集合类型为开发者提供了高效的数据管理工具。本文聚焦 Rust 中三种核心集合类型——Vector、String 和 HashMap,通过详细讲解和代码示例,剖析它们的基本原理、用法及注意事项。无论你是 Rust 新手还是进阶开发者,本文都将为你提供清晰的指引,助你更好地掌握这些集合类型在实际开发中的应用。
本文系统解析 Rust 的三大集合类型:Vector、String 和 HashMap。Vector 提供动态数组功能,适合连续存储同类型数据;String 支持可变 UTF-8 字符串操作;HashMap 实现键值对高效查询。文章通过代码示例详细介绍创建、更新、遍历及所有权管理等操作,揭示字符串索引限制及 HashMap 更新策略,帮助开发者在 Rust 项目中灵活运用这些工具。
Vec<T>
,叫做 vector
Vec<T>
,使用 vec! 宏fn main() {
// let v: Vec<i32> = Vec::new();
let v = vec![1, 2, 3];
}
fn main() {
let mut v = Vec::new();
v.push(1);
v.push(2);
v.push(3);
v.push(4);
}
fn main() {
let v = vec![1, 2, 3, 4, 5];
let third: &i32 = &v[2];
println!("The third element is {}", third);
match v.get(2) {
Some(third) => println!("The third element is {}", third),
None => println!("The third element is not found"),
}
}
fn main() {
let mut v = vec![1,2,3,4,5];
let first = &v[0];
v.push(6); // 报错
println!("The first element is {}", first);
}
fn main() {
let v = vec![100, 32, 57];
for i in &v {
println!("{}", i);
}
let mut v = vec![100, 32, 57];
for i in &mut v {
*i += 50;
}
for i in v {
println!("{}", i);
}
}
enum SpreadsheeetCell {
Int(i32),
Float(f64),
Text(String),
}
fn main() {
let row = vec![
SpreadsheetCell::Int(3),
SpreadsheetCell::Text(String::from("blue")),
SpreadsheetCell::Float(10.12),
];
}
Vec<T>
的操作都可用于 Stringfn main() {
let mut s = String::new();
}
fn main() {
let data = "initial contents";
let s = data.to_string();
let s1 = "initial contents".to_string();
let s = String::from("initial contents");
}
fn main() {
let mut s = String::from("foo");
s.push_str("bar");
println!("{}", s);
}
fn main() {
let mut s = String::from("lo");
s.push('l');
}
+
:连接字符串
fn add(self, s:&str) -> String {...}
fn main() {
let s1 = String::from("Hello, ");
let s2 = String::from("World!");
let s3 = s1 + &s2; // &s2 把String的引用转换成字符串切片所以编译通过(解引用强制转换)所有权保留
println!("{}", s3);
println!("{}", s1); // 报错 s1不可以继续使用
println!("{}", s2);
}
format!
:连接多个字符串
fn main() {
let s1 = String::from("tic");
let s2 = String::from("tac");
let s3 = String::from("toe");
// let s3 = s1 + "-" + &s2 + "-" + &s3;
// println!("{}", s3);
let s = format!("{}-{}-{}", s1, s2, s3);
println!("{}", s);
}
fn main() {
let s1 = String::from("hello");
let h = s1[0]; // 报错
}
Vec<u8>
的包装
fn main() {
let len = String::from("Hola").len();
// Unicode 标量值
println!("{}", len);
}
fn main() {
let w = "redis";
for b in w.bytes() { // 字节
println!("{}", b);
}
for b in w.chars() { // 标量值
println!("{}", b);
}
}
fn main() {
let hello = "creative";
let s = &hello[0..4];
println!("{}", s)
}
HashMap<K, V>
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
}
use std::collections::HashMap;
fn main() {
let teams = vec![String::from("Blue"), String::from("Yellow")];
let intial_scores = vec![10, 50];
let scores: HashMap<_, _> =
teams.iter().zip(intial_scores.iter()).collect();
}
use std::collections::HashMap;
fn main() {
let field_name = String::from("Favorite Color");
let field_value = String::from("Blue");
let mut map = HashMap::new();
map.insert(field_name, field_value);
// println!("{}: {}", field_name, field_value); // 报错 借用了移动的值
}
use std::collections::HashMap;
fn main() {
let field_name = String::from("Favorite Color");
let field_value = String::from("Blue");
let mut map = HashMap::new();
map.insert(&field_name, &field_value);
println!("{}: {}", field_name, field_value);
}
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
let team_name = String::from("Blue");
let score = scores.get(&team_name);
match score {
Some(s) => println!("{}", s),
None => println!("team not exist"),
};
}
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
for (k, v) in &scores {
println!("{}: {}", k, v);
}
}
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Blue"), 25);
println!("{:?}", scores);
}
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.entry(String::from("Yellow")).or_insert(50);
scores.entry(String::from("Blue")).or_insert(50); // Blue 存在不会插入
println!("{:?}", scores);
}
use std::collections::HashMap;
fn main() {
let text = "hello world wonderful world";
let mut map = HashMap::new();
for word in text.split_whitespace() { // 按空格分隔
let count = map.entry(word).or_insert(0); // 返回可变引用
*count += 1; // 解引用 加1
}
println!("{:#?}", map);
}
Rust 的 Vector、String 和 HashMap 是高效数据处理的基础工具。Vector 提供连续存储的灵活性,String 适配复杂的 UTF-8 字符串操作,HashMap 则以键值对实现快速数据访问。本文通过详尽的代码示例和解析,阐明了它们的使用方法及内存安全特性。掌握这些集合类型,不仅能提升 Rust 编程效率,还能帮助开发者编写更健壮的代码,应对多样化的开发需求。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!