柚子快報(bào)邀請碼778899分享:Rust 編程小技巧摘選(6)
柚子快報(bào)邀請碼778899分享:Rust 編程小技巧摘選(6)
目錄
Rust 編程小技巧(6)
1. 打印字符串
2. 重復(fù)打印字串
3. 自定義函數(shù)
4. 遍歷動態(tài)數(shù)組
5. 遍歷二維數(shù)組
6. 同時(shí)遍歷索引和值
7.?檢查數(shù)組是否包含某個(gè)值
8. 二維矩陣中查找某個(gè)值
附:迭代器方法的區(qū)別
Rust 編程小技巧(6)
1. 打印字符串
fn main() {
println!("Hello, world");
let s = "Rust";
print!("{}", s);
println!();
}
Rust 打印主要用宏 print!()、println!(),打印宏的占位符使用?{}。
2. 重復(fù)打印字串
有多種方法,比如使用:循環(huán)、string.repeat()、vector.join()等等。
fn main() {
for _ in 0..8 {
print!("rust");
}
println!("\n{}", "rust".repeat(8));
let s = vec!["rust"; 8];
println!("{:?}", s);
println!("{}", s.join(""));
println!("{}", s.join("."));
}
輸出:
rustrustrustrustrustrustrustrust rustrustrustrustrustrustrustrust ["rust", "rust", "rust", "rust", "rust", "rust", "rust", "rust"] rustrustrustrustrustrustrustrust rust.rust.rust.rust.rust.rust.rust.rust
3. 自定義函數(shù)
比如,一個(gè)整數(shù)的平方、絕對值
fn square(x: i32) -> i32 {
x * x
}
fn abs(x: i32) -> i32 {
if x < 0 {
return -x;
}
x
}
fn main() {
let n = square(9);
println!("{}", n);
println!("{}", abs(-10));
}
rust 函數(shù)的返回關(guān)鍵字 return,在最后的出口可以省略,只需一個(gè)表達(dá)式(不用分號結(jié)尾)。
4. 遍歷動態(tài)數(shù)組
.into_iter() 轉(zhuǎn)迭代器
fn main() {
let items = vec![11, 22, 33];
for x in items.clone().into_iter() {
do_something(x);
}
items.clone().into_iter().for_each(|x| do_something(x));
println!("{:?}", items);
}
fn do_something(n: i64) {
println!("Number {}", n)
}
輸出:
Number 11 Number 22 Number 33 Number 11 Number 22 Number 33 [11, 22, 33]
5. 遍歷二維數(shù)組
.iter() 創(chuàng)建迭代器?
fn main() {
let vec = vec![vec![1, 2], vec![3, 4], vec![5, 6]];
for outer_iter in vec.iter() {
for inner_iter in outer_iter.iter() {
print!("{} ", inner_iter);
}
}
println!();
vec.iter().for_each(|x| x.iter().for_each(|y| print!("{} ", y)));
println!();
}
6. 同時(shí)遍歷索引和值
.enumerate() 枚舉
fn main() {
test1();
test2();
}
fn test1() {
let items = ["a", "b", "c"];
for (i, x) in items.iter().enumerate() {
println!("Item {} = {}", i, x);
}
}
fn test2() {
let items = ["a", "b", "c"];
items.iter().enumerate().for_each(|(i, x)| {
println!("Item {} = {}", i, x);
});
}
7.?檢查數(shù)組是否包含某個(gè)值
代碼1:for ... in 遍歷
fn contain(list: &[i32], num: i32) {
let mut flag = false;
for &i in list {
if i == num {
flag = true;
break;
}
}
if flag {
println!("{:?} 包含 {}", list, num);
} else {
println!("{:?} 不含 {}", list, num);
}
}
fn main() {
let list = [1, 2, 3];
let num = 0;
contain(&list, num);
let num = 2;
contain(&list, num);
}
代碼2: 迭代器 + any()方法
fn contain(list: &[i32], num: i32) {
let flag = list.iter().any(|&item| item == num);
if flag {
println!("{:?} 包含 {}", list, num);
} else {
println!("{:?} 不含 {}", list, num);
}
}
fn main() {
let list = [1, 2, 3];
let num = 0;
contain(&list, num);
let num = 2;
contain(&list, num);
}
?代碼3: 直接用包含方法 contains()
fn contain(list: &[i32], num: i32) {
if list.contains(&num) {
println!("{:?} 包含 {}", list, num);
} else {
println!("{:?} 不含 {}", list, num);
}
}
fn main() {
let list = [1, 2, 3];
let num = 0;
contain(&list, num);
let num = 2;
contain(&list, num);
}
輸出:
[1, 2, 3] 不含 0 [1, 2, 3] 包含 2?
8. 二維矩陣中查找某個(gè)值
fn search
for (i, row) in m.iter().enumerate() {
for (j, col) in row.iter().enumerate() {
if *col == *x {
return Some((i, j));
}
}
}
None
}
fn main() {
let v = vec![
vec![1, 2, 3],
vec![4, 5, 6],
vec![7, 8, 9],
];
println!("{:?}", search(&v, &6));
println!("{:?}", search(&v, &0));
}
輸出:
Some((1, 2)) None??
附:迭代器方法的區(qū)別
.into_iter() 和 .iter() 兩個(gè)方法都用于創(chuàng)建迭代器,它們的區(qū)別在于:
1.所有權(quán)轉(zhuǎn)移:.into_iter()?方法會消耗當(dāng)前的集合,并將所有權(quán)轉(zhuǎn)移給迭代器。這意味著在迭代完成后,原集合將不再可用。而?.iter()?方法不會消耗集合,它只是創(chuàng)建一個(gè)新的迭代器,你可以在迭代完成后繼續(xù)使用原集合。
2.消耗和產(chǎn)生元素:.into_iter()?會消耗集合中的元素,并將它們放入迭代器中。這意味著每次調(diào)用迭代器的?next()?方法都會消耗集合中的一個(gè)元素。而?.iter()?只是產(chǎn)生元素的引用,并不會消耗集合中的元素。
3.用途:當(dāng)你需要遍歷集合中的元素并獲取它們的所有權(quán)時(shí),應(yīng)該使用?.into_iter()。當(dāng)你只需要讀取集合中的元素而不消耗它們時(shí),應(yīng)該使用?.iter()。
?相關(guān)閱讀:
Rust 編程小技巧摘選(1)_Hann Yang的博客-CSDN博客
Rust 編程小技巧摘選(2)_Hann Yang的博客-CSDN博客
Rust 編程小技巧摘選(3)_Hann Yang的博客-CSDN博客
Rust 編程小技巧摘選(4)_Hann Yang的博客-CSDN博客
Rust 編程小技巧摘選(5)_Hann Yang的博客-CSDN博客
柚子快報(bào)邀請碼778899分享:Rust 編程小技巧摘選(6)
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。