0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

基本类型使用

Posted at

基本类型使用

hashmap 使用

1 使用 use std::collections::HashMap;

2新建哈希map

let mut scores = hashmap::new()

3 插入值

scores.insert(key,value)

4 只有建没有值下插入值

scores.entry(key).or_insert(value)

5 覆盖值

scores.insert(key,value)

6 获取map的值

onwerkey = String::from(key)

scores.get(&onwerkey)

hasher 是一个实现了 BuildHasher trait

STRING的使用

字符串是 UTF-8 编码的,所以可以包含任何正确编码的数据

1新建字符串

let mut s = String::new();

2 存储

let hello = String::from("你好");

3 更新字符串

let mut s = String::from("foo")

方法1 s.pust_str("bar") 能push多个字符串

方法2  s.push("a") 只能push单个字符串

4 使用 +号进行拼接字符串

let s1 = String::from("Hello, "); let s2 = String::from("world!"); let s3 = s1 + &s2; // 注意 s1 被移动了,不能继续使用

首先,s2 使用了 &,意味着我们使用第二个字符串的 引用 与第一个字符串相加。这是因为 add 函数的 s 参数:只能将 &str 和 String 相加,不能将两个 String 值相加。不过等一下 —— 正如 add 的第二个参数所指定的,&s2 的类型是 &String 而不是 &str。那么为什么示例 8-18 还能编译呢?

之所以能够在 add 调用中使用 &s2 是因为 &String 可以被 强转(_coerced_)成 &str。当 add 函数被调用时,Rust 使用了一个被称为 解引用强制转换(_deref coercion_)的技术,你可以将其理解为它把 &s2 变成了 &s2[..]。第 15 章会更深入的讨论解引用强制转换。因为 add 没有获取参数的所有权,所以 s2 在这个操作后仍然是有效的 String

其次,可以发现签名中 add 获取了 self 的所有权,因为 self 没有 使用 &。这意味着示例 8-18 中的 s1 的所有权将被移动到 add 调用中,之后就不再有效。虽然 let s3 = s1 + &s2; 看起来就像它会复制两个字符串并创建一个新的字符串,而实际上这个语句会获取 s1 的所有权,附加上从 s2 中拷贝的内容,并返回结果的所有权。换句话说,它看起来好像生成了很多拷贝,不过实际上并没有:这个实现比拷贝要更高效。

5 使用format进行拼接字符串

let ss = format!("{}-{}-{}",s1,s2,data);

6 内部表现

string是一个vec的封装

7 遍历字符串的方法

//需要操作单独的 Unicode 标量值
for c in "aa".chars() {
    println!("{}",c);
}
//bytes 方法返回每一个原始字节,这可能会适合你的使用场景
for b in "नमस्ते".bytes() {
    println!("{}", b);
}

* vector的使用

1 新建vec

let v: Vec<i32> = Vec::new();

2 更新vector

let mut v = Vec::new();
v.push(5);
v.push(6)
//无法使用println察看

3 读取 vector 的元素

let v = vec![1,2,3,4,5,6];
    let third: &i32 = &v[2];
    println!("third element is {}",third);
    match v.get(2) {
        Some(third) => println!("the third element is {}",third),
        None => println!("there is no third element"),
    }

4 遍历vector中的元素

let mut v = vec![100,2,33];
    for i in &mut v {
        // 遍历需要 &v
        println!("{}",i);
        *i += 50;
        //如果需要修改,需要mut
        println!("L2 is {}",i);
    }

5 使用枚举来存储多种类型

enum SpreadsheetCell{
    Int(i32),
    Float(f64),
    Text(String),
}

let row = vec![
    SpreadsheetCell::Int(3),
];
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?