rust学习_集合与字符串

集合与字符串包含以下三个知识点:向量,字符串,映射表。 

下面是这三个字符串的知识点

向量  1.向量是什么
  1.存放多值的单数据结构,该结构将相同类型的值线性的存放在内存中
      
线性:在内存中以连续的方式排列 

2.向量如何定义 
  1.声明一个
空的向量
     let v :Vec<i32> = Vec::new();   //创建类型为i32的空向量
        
vec:vector 表示动态增长或缩小长度的数组
  2.通过
数组创建向量
     vec = vec![1,2,3,4]  //通过数组创建向量
        
vec:宏的名字
        
!:告诉rust,这是一个宏调用
       
 [1,2,3,4] 传给宏的参数,传给宏一组数字,宏会帮我们创建一个包含这些数字的向量

3.如何往向量中添加元素
   let mut vector = vec![1,2,4,8]
   vector.
push(16)

4.将一个向量拼接到另一个向量的尾部
   let mut v1: Vec<i32> = vec![1,2,3,8]
   let mut v2: Vec<i32> = vec![16,32,64]
   v1.
append(&mut v2);
5.获取向量中的某个值
   1.通过get方法获取 它返回一个option
        let mut v = vec![1,2,3,4,5]
       println!("{}", 
match v.get(0)) {
           
Some(third) => println!("This third element is :{}",third),
           
None => println("There is no third element."),
       }
   2.通过
索引
       let v = vec![1,2,3,4,5]; 
       let third = v[2];
       注意:如果尝试访问一个不存在的索引,程序将会
panic并崩溃

字符串
1.字符串的类型
    1.str:不可变,固定长度的字符串切片,通过以 &str形式出现
    2.String:一个
可增长的 堆分配的字符串类型。
   
 str:就像一本书的内容,你只读,不可修改,也不能带走(拥有数据)
    
String:就像自己的笔记,可以在上面写字,也可以随意携带

2.字符串字面量
   let s = "Hello, world";
 
3.创建字符串  
  1.创建一个空的字符串
      let mut s =
 String::new();
  2.用 to_string()  或 string::from() 将字符串切片转为String
     let s1 = 
"Hello".to_string()

4.字符串修改
  1.使用
push_str() 和 push() 方法向 String 添加文本
      let mut s = String::from("Hello")
      s.push_str(", world!);
      s.push("!")
  2.使用 + 或者 format! 宏来拼接字符串
     let s1 = String::from("Hello, ");
     let s2 = String::from("world!");
     let s3 = s1 
&s2
     s1被移动:s1的所有权被转移
     s2被借用:s2暂时被借用 但是所有权还在 

5.如何访问字符串中的字符
    1.不允许通过索引直接访问字符串中的字符  如 let h = s[0]
    2.使用 chars()  方法迭代字符串中的字符
       for c in  "你好 世界".
chars() {
          println!("{}",c);
       }
    3.使用bytes()方法迭代字符串中的字符
       for b in "你好 世界".
bytes() {
          println!("{}",b)
       }

6.字符串切片
    1.允许使用字符串切片来引用字符串的一部分  但必须确保切片的边界在字符串边界
      let s = "你好 世界"
      let Slice = 
&s[0..3]

7.Rust字符串与UTF-8
     1.rust的String类型保证是有效的
UTF-8 
     2.rust的char类型代表一个Unicdoe标量值,意味着可以表示比ASCII更广泛的字符 
         ASCII:只包含128个字符,包括英文字母 数字和 一些特殊符号
         Unicode:可以表示ASCII中的字符,也可以表示ASCII之外的字符 如中文的”汉“  日语,或表情符号

映射表 1.创建hashMap
   use std::collections::HashMap;
   let mut map = HashMap::new()

2.向hashMap中插入元素
    map
.insert(String::from("key1"),10)

3.访问元素
   使用get方法通过键来访问值
   let value = map.
get("key1")

4.更新已存在的元素
   1.map.
insert(String::from("key1"),20)
   2.map
.entry(String::from("key1")).and_modify(|e| * e +=1);
      |e| *e +=1是一个闭包的写法
        1.|e|:定义闭包, |e|表示闭包接收一个参数e 在上面例子中,e是一个可变引用,指向hashMap中与特定键关联的值
        2. *e: e是一个可变引用,需要使用 * 来访问它指向的实际值
        3. *e +=1: 将e指向的值增加1 

5.如何遍历hashMap
    1.使用for循环遍历 hashMap中所有键值对
       for (key,value) in &map{
          println!("{}:{}",key,value)
       }

6.哈希函数
   1.默认情况下,hashMap使用SipHash算法作为哈希函数,但可以通过指定不同的hasher来改变这一点
      use std::collections::HashMap;
      use std::collections::hash_map::DefaultHasher;
      let mut map = HashMap:
:with_hasher(DefaultHasher::new());

7.性能
   1.时间复杂度:平均情况下,插入 删除 查找的时间复杂度为
O(1)
   2.空间复杂度:HashMap 通常比存储同样数量元素的 Vec 需要更多的空间,因为它需要存储额外的哈希表信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

simper_zxb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值