Rust4.2 Common Collections

编程入门 行业动态 更新时间:2024-10-22 19:27:46

Rust4.2 <a href=https://www.elefans.com/category/jswz/34/1764787.html style=Common Collections"/>

Rust4.2 Common Collections

Rust学习笔记

Rust编程语言入门教程课程笔记

参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community)

Lecture 8: Common Collections

fn main() {//Vectorlet mut v: Vec<i32> = Vec::new();//new empty vectorv.push(1);let v2 = &v[0];//immutable borrow//v.push(2);//mutable borrow//cannot borrow `v` as mutable because it is also borrowed as immutable//because v.push will cause the vector to reallocate and invalidate the reference//so v2 may be pointing to deallocated memoryprintln!("The first element is: {}", v2);let mut u = vec![1, 2, 3];//new vector with valuesprintln!("u[0] = {:?}", u[0]);//access element with indexprintln!("u[1] = {:?}", u.get(1));//access element with get()match u.get(1) {Some(second) => println!("The second element is {}", second),None => println!("There is no second element."),}u.insert(0, 0);//insert element at indexfor i in &u {//immutable borrowprintln!("{}", i);}for i in &mut u {//mutable borrow*i += 50; //dereference i and add 50 to it}//using enum to store multiple types in a vectorenum SpreadsheetCell {Int(i32),Float(f64),Text(String),}let row = vec![SpreadsheetCell::Int(3),SpreadsheetCell::Float(10.12),SpreadsheetCell::Text(String::from("blue")),];for i in &row {//for + matchmatch i {SpreadsheetCell::Int(i) => println!("Int: {}", i),SpreadsheetCell::Float(f) => println!("Float: {}", f),SpreadsheetCell::Text(s) => println!("Text: {}", s),}}//Stringlet mut s = String::new();//new empty stringprintln!("{}", s);let data = "initial contents 0";//new string from string literals = data.to_string();//new string from string literalprintln!("{}", s);s = "initial contents 1".to_string();//new string from string literalprintln!("{}", s);s = String::from("initial contents 2");//new string from string literalprintln!("{}", s);s.push_str("bar");//append string literalprintln!("{}", s);s.push('l');//append charprintln!("{}", s);//concatenationlet s1 = String::from("Hello, ");let s2 = String::from("world!");let s3 = s1 + &s2;//s1 has been moved here and can no longer be usedprintln!("{}", s3);//format! macrolet s1 = String::from("tic");let s2 = String::from("tac");let s3 = String::from("toe");let s4 = format!("{}-{}-{}", s1, s2, s3);//s1, s2, s3 not movedprintln!("{}", s1);println!("{}", s2);println!("{}", s3);println!("{}", s4);//indexinglet s1 = String::from("hello");//let h = s1[0];//cannot index into a Stringlet h = &s1[0..1];//indexing with rangeprintln!("{}", h);//lengthlet len = String::from("Hola").len();//length in bytesprintln!("{}", len);let len = String::from("Здравствуйте").len();//length in bytesprintln!("{}", len);let len = String::from("Здравствуйте").chars().count();//length in charsprintln!("{}", len);//iterationfor c in "नमस्ते".chars() {println!("{}", c);}for b in "नमस्ते".bytes() {println!("{}", b);}//Hash Map//HashMap<K, V> stores a mapping of keys of type K to values of type Vuse std::collections::HashMap;//hashmap is not in the preludelet mut scores = HashMap::new();//new empty HashMapscores.insert(String::from("Blue"), 10);//insert key-value pairscores.insert(String::from("Yellow"), 50);//insert key-value pairprintln!("{:?}", scores);//collecting into a hashmaplet teams = vec![String::from("Blue"), String::from("Yellow")];//new vectorlet initial_scores = vec![10, 50];//new vectorlet scores: HashMap<_, _> = teams.iter().zip(initial_scores.iter()).collect();//collect into hashmap//HashMap<_,_> type annotation is needed because collect can collect into many different data structures//zip() creates a vector of tuplesprintln!("{:?}", scores);//ownershiplet field_name = String::from("Favorite color");let field_value = String::from("Blue");let mut map = HashMap::new();//new empty hashmap//map.insert(field_name, field_value);//field_name and field_value are moved into map//println!("{}", field_name);//field_name and field_value are moved into mapmap.insert(&field_name, &field_value);//field_name and field_value are borrowedprintln!("{}", field_name);//field_name and field_value are borrowed//accessing values in a hashmaplet team_name = String::from("Blue");let score = scores.get(&team_name);//get() returns an Option<&V>match score {Some(s) => println!("{}", s),None => println!("No score"),}//iterating over a hashmapfor (key, value) in &scores {println!("{}: {}", key, value);}//updating a hashmap//overwriting a valuelet mut scores = HashMap::new();//new empty hashmapscores.insert(String::from("Blue"), 10);//insert key-value pairscores.insert(String::from("Blue"), 25);//overwrite valueprintln!("{:?}", scores);//only inserting a value if the key has no valuescores.entry(String::from("Yellow"));//insert key-value pair if key has no valuescores.entry(String::from("Yellow")).or_insert(50);//insert key-value pair if key has no valuescores.entry(String::from("Blue")).or_insert(50);//do not insert key-value pair if key has valueprintln!("{:?}", scores);//updating a value based on the old valuelet text = "hello world wonderful world";let mut map = HashMap::new();//new empty hashmapfor word in text.split_whitespace() {//split string into wordslet count = map.entry(word).or_insert(0);//insert key-value pair if key has no value*count += 1;//dereference count and increment it}println!("{:?}", map);}

更多推荐

Rust4.2 Common Collections

本文发布于:2023-11-15 07:56:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1596281.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Common   Collections

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!