banner
lzyoo

lzyoo

本人职业:前端开发工程师 工作年限:三年 技术栈:React、Vue、Nest、Python 一直在努力,一直在放弃,好想有一个引路人带领。

學習Rust(一)數據類型

字串#

  • 我發現 Rust 字串跟我 JavaScript 的差別好大!!不能用一個語言的思維去學所有語言。
  • String 是一個 Vec<u8> 的封裝,不是一個真的字串!
  1. 創建一個字串
`String::new`用來創建空字串實例,沒有參數
let mut s =String::new();

`String::from`用來創建字串實例,使用&str類型當作參數
let mut ss=String::from("我是rust");
// 等價
let mut ss="我是rust".to_string();

我看編輯器返回的類型都一樣,所以說日常使用裡面想用哪個用哪個。
  1. 常用的字串操作
// 返回字串長度
ss.len(); // 10 
// 返回字串是否為空
ss.is_empyt(); // false
// 字串轉成位元組值
ss.into_bytes(); // [230, 136, 145, 230, 152, 175, 114, 117, 115, 116, 229, 164, 169, 228, 184, 139, 230, 151, 160, 230, 149, 140]
// 小寫
ss.to_lowercase(); // 我是rust
// 大寫
ss.to_uppercase();// 我是RUST
// 返回刪除了前後空格的字串片
ss.trim();// 我是rust

// 字串片解析為其他類型
let num:u32 = "22".parse().unwarp();

// 追加字串 接收一個&str類型
ss.push_str("天下無敵"); // 我是rust天下無敵

// 文字佔用了3個位元組,所以會報錯,使用字母的時候正常
// 假如ss值為rust
ss.insert_str(1,"天下無敵"); // r天下無敵ust



// 匹配是否包含參數值
ss.contains("r") // true
// 匹配開頭是否包含參數值
ss.start_with("我") // true
// 匹配結尾是否包含參數值
ss.end_with("t") // true
// 匹配位元組的索引值
ss.find("r") // Some(6)
// 字串替換
ss.replace("rust", "c++") // 我是c++

數值#

整型#

有無符號的區別是能否為負值

  • 可能為負數的值用有符號的類型
  • 永遠是正數的值用無符號的類型
長度有符號無符號
8i8u8
16i16u16
32i32u32
64i64u64
128i128u128
archisizeusize

浮點型#

f32f64
rust 預設浮點類型為 ****f64**

一些簡單運算及自帶方法#

let sum = 99 + 1; // 100

let difference = 100 - 1; // 99

let multip = 4 * 30; // 120

let div = 6 / 3; // 2

let truncated = -6 / 3; // -2

let remainder = 43 % 5; // 3

// 絕對值
(-10i32).abs(); // 10
// 絕對差值
(-10i32).abs_diff(5); // 15

布林#

跟其他語言沒什麼區別

元組#

使用場景

  1. 函數的參數傳遞
  2. 返回值類型
let tuple = (5, "Rust", true);
// 存取
let number = tuple.0; // 5

let student_tuple = ("RR", 100);

fn tuple_match((name,score):(&str,u32))-> String{
	match score{
		90..=100 => format!("在{}課程中表現出色,成績為{},優秀!",
		80..=89 => format!("在{}課程中表現良好,成績為{},良好!", course_name, score),
		70..=79 => format!("在{}課程中表現一般,成績為{},及格!", course_name, score),
		_ => format!("在{}課程中需要努力,成績為{},不及格。", course_name, score),
	}
}
tuple_match(student_tuple) // RR在課程中表現出色,成績為100,優秀!

陣列#

Array#

  1. 固定長度的元素集合,且類型需統一。
  2. 不支持新增,刪除操作。
let mut numbers: [i32; 5] = [1, 2, 3, 4, 5];
// 存取陣列元素
println!("第一個元素: {}", numbers[0]);
println!("最後一個元素: {}", numbers[4]);
// 修改陣列中的元素
numbers[2] = 20;
println!("修改後的第三個元素: {}", numbers[2]);
// 遍歷陣列
for elem in numbers.iter() {
    println!("{}", elem);
}
// 使用陣列字面量創建陣列
let array_literal: [i32; 6] = [0; 6];
println!("使用字面量初始化的陣列: {:?}", array_literal);

Vec#

  1. 動態大小的元素集合
  2. 支持新增,刪除操作。
let mut vec: Vec<i32> = Vec::new();
vec.push(1);
vec.push(2);
vec.push(3);
// 等價
let mut vec = vec![1,2,3];
// 等價
let mut vec = Vec::from([1, 2, 3]);

vec.len(); // 2
// 彈出末尾元素值
vec.pop(); // Some(2)
// 新增
vec.push(99); // [1,2,3,99]
// 根據索引刪除值
vec.remove(0); // [2,3]
// 匹配值
vec.contains(&3); // true
// 排序
vec!["hello", "world"].join(" "); // hello world
vec.sort(); // [1,2,3]
// 切片,返回對切片元素的迭代器
let mut chunks= vec.chunks(2);
chunks.next().unwrap(); // &[1,2]
chunks.next().unwrap(); // &[3]



// 存取
println!("第一個元素: {}", vec[0]);
println!("最後一個元素: {}", vec[2]);
// 遍歷
for i in vec{
    println!("使用字面量初始化的陣列: {}", i);
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。