日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rust腐竹是什么意思_学习Rust 集合与字符串

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rust腐竹是什么意思_学习Rust 集合与字符串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Rust 語言是一種高效、可靠的通用高級語言。其高效不僅限于開發效率,它的執行效率也是令人稱贊的,是一種少有的兼顧開發效率和執行效率的語言。

集合(Collection)是數據結構中最普遍的數據存放形式,Rust 標準庫中提供了豐富的集合類型幫助開發者處理數據結構的操作。

向量

向量(Vector)是一個存放多值的單數據結構,該結構將相同類型的值線性的存放在內存中。

向量是線性表,在 Rust 中的表示是 Vec。

向量的使用方式類似于列表(List),我們可以通過這種方式創建指定類型的向量:

let?vector:?Vec=?Vec::new();?//?創建類型為?i32?的空向量

let?vector?=?vec![1,?2,?4,?8];?????//?通過數組創建向量

我們使用線性表常常會用到追加的操作,但是追加和棧的 push 操作本質是一樣的,所以向量只有 push 方法來追加單個元素:

實例

fn?main()?{

let?mut?vector?=?vec![1,?2,?4,?8];

vector.push(16);

vector.push(32);

vector.push(64);

println!("{:?}",?vector);

}

運行結果:

[1,?2,?4,?8,?16,?32,?64]

append 方法用于將一個向量拼接到另一個向量的尾部:

實例

fn?main()?{

let?mut?v1:?Vec=?vec![1,?2,?4,?8];

let?mut?v2:?Vec=?vec![16,?32,?64];

v1.append(&mut?v2);

println!("{:?}",?v1);

}

運行結果:

[1,?2,?4,?8,?16,?32,?64]

get 方法用于取出向量中的值:

實例

fn?main()?{

let?mut?v?=?vec![1,?2,?4,?8];

println!("{}",?match?v.get(0)?{

Some(value)?=>?value.to_string(),

None?=>?"None".to_string()

});

}

運行結果:

1

因為向量的長度無法從邏輯上推斷,get 方法無法保證一定取到值,所以 get 方法的返回值是 Option 枚舉類,有可能為空。

這是一種安全的取值方法,但是書寫起來有些麻煩。如果你能夠保證取值的下標不會超出向量下標取值范圍,你也可以使用數組取值語法:

實例

fn?main()?{

let?v?=?vec![1,?2,?4,?8];

println!("{}",?v[1]);

}

運行結果:

2

但如果我們嘗試獲取 v[4] ,那么向量會返回錯誤。

遍歷向量:

實例

fn?main()?{

let?v?=?vec![100,?32,?57];

for?i?in?&v?{

println!("{}",?i);

}

}

運行結果:

100

32

57

如果遍歷過程中需要更改變量的值:

實例

fn?main()?{

let?mut?v?=?vec![100,?32,?57];

for?i?in?&mut?v?{

*i?+=?50;

}

}

字符串

字符串類(String)到本章為止已經使用了很多,所以有很多的方法已經被讀者熟知。本章主要介紹字符串的方法和 UTF-8 性質。

新建字符串:

let?string?=?String::new();

基礎類型轉換成字符串:

let?one?=?1.to_string();?????????//?整數到字符串

let?float?=?1.3.to_string();?????//?浮點數到字符串

let?slice?=?"slice".to_string();?//?字符串切片到字符串

包含 UTF-8 字符的字符串:

let?hello?=?String::from("????????????");

let?hello?=?String::from("Dobry?den");

let?hello?=?String::from("Hello");

let?hello?=?String::from("???????");

let?hello?=?String::from("??????");

let?hello?=?String::from("こんにちは");

let?hello?=?String::from("?????");

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

let?hello?=?String::from("Olá");

let?hello?=?String::from("Здравствуйте");

let?hello?=?String::from("Hola");

字符串追加:

let?mut?s?=?String::from("run");

s.push_str("oob");?//?追加字符串切片

s.push('!');???????//?追加字符

用 + 號拼接字符串:

let?s1?=?String::from("Hello,?");

let?s2?=?String::from("world!");

let?s3?=?s1?+?&s2;

這個語法也可以包含字符串切片:

let?s1?=?String::from("tic");

let?s2?=?String::from("tac");

let?s3?=?String::from("toe");

let?s?=?s1?+?"-"?+?&s2?+?"-"?+?&s3;

使用 format! 宏:

let?s1?=?String::from("tic");

let?s2?=?String::from("tac");

let?s3?=?String::from("toe");

let?s?=?format!("{}-{}-{}",?s1,?s2,?s3);

字符串長度:

let?s?=?"hello";

let?len?=?s.len();

這里?len?的值是?5。

let?s?=?"你好";

let?len?=?s.len();

這里 len 的值是 6。因為中文是 UTF-8 編碼的,每個字符長 3 字節,所以長度為6。但是 Rust 中支持 UTF-8 字符對象,所以如果想統計字符數量可以先取字符串為字符集合:

let?s?=?"hello你好";

let?len?=?s.chars().count();

這里 len 的值是 7,因為一共有 7 個字符。統計字符的速度比統計數據長度的速度慢得多。

遍歷字符串:

實例

fn?main()?{

let?s?=?String::from("hello中文");

for?c?in?s.chars()?{

println!("{}",?c);

}

}

運行結果:

h

e

l

l

o

從字符串中取單個字符:

實例

fn?main()?{

let?s?=?String::from("EN中文");

let?a?=?s.chars().nth(2);

println!("{:?}",?a);

}

運行結果:

Some('中')

注意:nth 函數是從迭代器中取出某值的方法,請不要在遍歷中這樣使用!因為 UTF-8 每個字符的長度不一定相等!

如果想截取字符串字串:

實例

fn?main()?{

let?s?=?String::from("EN中文");

let?sub?=?&s[0..2];

println!("{}",?sub);

}

運行結果:

EN

但是請注意此用法有可能肢解一個 UTF-8 字符!那樣會報錯:

實例

fn?main()?{

let?s?=?String::from("EN中文");

let?sub?=?&s[0..3];

println!("{}",?sub);

}

運行結果:

thread?'main'?panicked?at?'byte?index?3?is?not?a?char?boundary;?it?is?inside?'中'?(bytes?2..5)?of?`EN中文`',?src\libcore\str\mod.rs:2069:5

note:?run?with?`RUST_BACKTRACE=1`?environment?variable?to?display?a?backtrace.

映射表

映射表(Map)在其他語言中廣泛存在。其中應用最普遍的就是鍵值散列映射表(Hash Map)。

新建一個散列值映射表:

實例

use?std::collections::HashMap;

fn?main()?{

let?mut?map?=?HashMap::new();

map.insert("color",?"red");

map.insert("size",?"10?m^2");

println!("{}",?map.get("color").unwrap());

}

注意:這里沒有聲明散列表的泛型,是因為 Rust 的自動判斷類型機制。

運行結果:

red

insert 方法和 get 方法是映射表最常用的兩個方法。

映射表支持迭代器:

實例

use?std::collections::HashMap;

fn?main()?{

let?mut?map?=?HashMap::new();

map.insert("color",?"red");

map.insert("size",?"10?m^2");

for?p?in?map.iter()?{

println!("{:?}",?p);

}

}

運行結果:

("color",?"red")

("size",?"10?m^2")

迭代元素是表示鍵值對的元組。

Rust 的映射表是十分方便的數據結構,當使用 insert 方法添加新的鍵值對的時候,如果已經存在相同的鍵,會直接覆蓋對應的值。如果你想"安全地插入",就是在確認當前不存在某個鍵時才執行的插入動作,可以這樣:

map.entry("color").or_insert("red");

這句話的意思是如果沒有鍵為 "color" 的鍵值對就添加它并設定值為 "red",否則將跳過。

在已經確定有某個鍵的情況下如果想直接修改對應的值,有更快的辦法:

實例

use?std::collections::HashMap;

fn?main()?{

let?mut?map?=?HashMap::new();

map.insert(1,?"a");

if?let?Some(x)?=?map.get_mut(&1)?{

*x?=?"b";

}

}

總結

以上是生活随笔為你收集整理的rust腐竹是什么意思_学习Rust 集合与字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。