当前位置: 首页 > news >正文

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);}
http://www.lryc.cn/news/228557.html

相关文章:

  • 芸鹰蓬飞:抖音投流以后还有自然流量吗?
  • CTFhub-RCE-php://input
  • RISC-V处理器设计(五)—— 在 RISC-V 处理器上运行 C 程序
  • 【PIE-Engine 数据资源】全球250米LAI产品
  • vcomp120.dll丢失怎么办?vcomp120.dll丢失的解决方法分享
  • linux下使用Docker Compose部署Spug实现公网远程访问
  • 【STM32 CAN】STM32G47x 单片机FDCAN作为普通CAN外设使用教程
  • Apache Log4j2漏洞
  • 超级干货:光纤知识总结最全的文章
  • PyCharm因安装了illuminated Cloud插件导致加载项目失败
  • 微服务拆分的一些基本原则
  • Ubuntu取消sudo的输入密码
  • 基于ubuntu22.04手动安装openstack——2023.2版本(最新版)的问题汇总
  • 如何入门学习黑客技术?如何选择编程语言?如何选择适合黑客的操作系统?
  • 教育局档案室智慧档案库房建设方案
  • 智慧城市数据中台建设方案:PPT全文51页,附下载
  • 计算复杂性理论(一)图灵机
  • VM虚拟机只有一个C盘怎么添加硬盘新分区盘符
  • 堆排序(大根堆、小根堆)
  • 操作系统专栏 学习导航or使用说明
  • 计算机毕业设计选题推荐-课程学习微信小程序/安卓APP-项目实战
  • OracleLinux9 安装 fcgiwrap 并添加 selinux 规则以在 nginx 调用
  • Django框架
  • 用C语言来实现冒泡排序
  • flink的副输出sideoutput单元测试
  • 使用Inis搭配内网穿透实现Ubuntu上快速搭建博客网站远程访问
  • 基于蝴蝶算法优化概率神经网络PNN的分类预测 - 附代码
  • flink的KeyedBroadcastProcessFunction测试
  • 【pytorch深度学习】torch-张量Tensor
  • odoo16前端框架源码阅读——rpc_service.js