• rust中的函数和常见错误分析


    rust中的函数

    iter()

    迭代

    1. use std::collections::HashMap;
    2. fn main() {
    3. let mut map=HashMap::new();
    4. for i in 0..10{
    5. map.insert(i,i.to_string()+"str");
    6. }
    7. for i in map.iter(){
    8. println!("{:?}",i);
    9. }
    10. }

    pow(i)--i次方

    sqrt()--->对f64类型求根号

    1. pub trait GetAdd{
    2. fn add(&self)->i32;
    3. fn get_name(&self){
    4. println!("babay");
    5. }
    6. }
    7. pub trait GetMultiple{
    8. fn multiple(&self)->i32;
    9. }
    10. pub struct Point{
    11. pub x:i32,
    12. pub y:i32
    13. }
    14. struct Ractangle{
    15. lenght:i32,
    16. width:i32
    17. }
    18. impl GetAdd for Point{
    19. fn add(&self)->i32{
    20. self.x+self.y
    21. }
    22. }
    23. impl GetMultiple for Point{
    24. fn multiple(&self)->i32{
    25. self.x*self.y
    26. }
    27. }
    28. impl GetAdd for Ractangle{
    29. fn add(&self)->i32{
    30. self.lenght+self.width
    31. }
    32. }
    33. impl GetMultiple for Ractangle{
    34. fn multiple(&self)->i32{
    35. self.width*self.width
    36. }
    37. }
    38. fn main(){
    39. let p1:Point=Point{x:1,y:2};
    40. let r1:Ractangle=Ractangle{lenght:100,width:200};
    41. display_add(&p1);
    42. display_add(&r1);
    43. let p2:Point=Point{x:2,y:3};
    44. get_distance(&p1,&p2);
    45. }
    46. pub fn display_add(arg:&impl GetAdd){
    47. println!("Point_add={}",arg.add());
    48. }
    49. pub fn get_distance(p1:&Point,p2:&Point){
    50. println!("The distance between p1 to p2 is {}",(((p1.x-p2.x).pow(2)+(p1.y-p2.y).pow(2))as f64).sqrt());
    51. }

    类型转换函数

    into()---类型转换函数

    1. fn main() {
    2. let arr=[1,2,3,4,5];
    3. let _v:Vec=arr.into();
    4. let x=100;
    5. let _y:f64=x.into();
    6. let s="ssss";
    7. let _s1:String=s.into();
    8. }

    pasre::()类型解析函数

    链接

    注意:这个函数的使用对象只能是String或者&str

    unwrap()---检测错误

    unwrap 方法,该方法在发现错误时,会直接调用 panic 导致程序的崩溃退出,在实际项目中,请不要这么使用,

    split_whitespace()--空格分隔字符串

    1. use std::collections::HashMap;
    2. fn main() {
    3. let mut map=HashMap::new();
    4. let text="This is a very nice girl.";
    5. for word in text.split_whitespace(){
    6. let count=map.entry(word).or_insert(0);
    7. *count +=1;
    8. }
    9. println!("{:?}",map);
    10. }

    panic

    作用:调用panic!宏来终止程序(简而言之:让程序崩溃)。

    unwrap

    unwrap 意味着发出以下命令:对Option和Result计算结果值,如果有错误,恐慌并停止程序。

    Unwrap 在收到 none 时返回 panic

    字符类型判定函数

    1. let my_first_initial = 'C';
    2. if my_first_initial.is_alphabetic(){
    3. println!("Alphabetical!");
    4. } else if my_first_initial.is_numeric() {
    5. println!("Numerical!");
    6. } else {
    7. println!("Neither alphabetic nor numeric!");
    8. }

    字符串函数

    增加和删除

    链接

    匹配字符和删除--trim

    trim之后返回&str类型

    链接

    注意:

    format(),to_lowercase(),to_uppercase()返回的是String类型,不是&str.

    1. fn main() {
    2. let s:String="abcd".to_string();
    3. let ups:String=s.to_uppercase();
    4. println!("s={}\nups={}",s,ups);
    5. let re_s:&str="nnnn";
    6. let re_up_s:&str=re_s.to_uppercase();//报错
    7. println!("re_s={}\nre_up_s={}",re_s,re_up_s);
    8. }

    从字符串中读取行,字符串转为Vec,字符串分隔

    for r in results.lines() {
            let v: Vec<&str> = r.split(',').collect();

    ...

    }

    判定字符串为空

    string.is_empty()
     

    time时间函数

    use std::time::Duration;

    分:

    秒:thread::sleep(Duration::from_secs(1));

    HashMap

    求键值对个数:hashmap.len()

    求所有键生成vec:let mut keys: Vec<&String> = scores.keys().collect();

    求所有值的个数:hashmap.values().sum::();

    T是interge类型

    hashmap函数链接

    map()闭包函数

    链接

    collect::()----collect()

    收集迭代器的结果,生成指定类型的集合,集合的类型要显示的标记出来。

    生成vec

    1. fn main() {
    2. let a=[1,2,3,4,5];
    3. let v:Vec<_>=a.iter().map(|x|x*2).collect();
    4. println!("{:?}",v);
    5. }

    生成HashMap

    一定要使用into_iter()

    1. use std::collections::HashMap;
    2. fn main() {
    3. let a=[(1,"n1"),(2,"n2"),(3,"n3")];
    4. let hmap:HashMap<_,_>=a.into_iter().collect();
    5. println!("{:?}",hmap);
    6. println!("{:?}",a);//静态数组,不会被move
    7. }

    filter()

    筛选出符合条件的元素

    1. fn main() {
    2. let a=[1,2,3,4,5];
    3. let v:Vec<_>=a.iter().filter(|x|*x%2==0).collect();
    4. println!("{:?}",a);
    5. println!("{:?}",v);
    6. }

    swap()

    链接

    take()

    拿走一个变量合作一个值,可以返回这个变量的值或者返回给定的常量值。可以是数组。

    链接

  • 相关阅读:
    企业/公司 | 设计行业,图档图纸加密、防泄密软件系统
    6.SpringBoot与缓存
    【vue3】实现筛选页组件(深层嵌套循环数据切换)的封装和调用
    【虚拟机】VMware的NAT模式、桥接模式、仅主机模式
    【C++Primer---C++知识点记录*V---IO库】
    怎么才能写好技术文档——这是我的全部经验
    LeetCode刷题笔记:55.跳跃游戏
    MySQL该使用哪种CPU架构服务器?
    多线程详细介绍
    Qt5开发从入门到精通——第四篇(标准字体对话框类 getFont())
  • 原文地址:https://blog.csdn.net/m0_60274660/article/details/126259501