国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Rust 編程小技巧摘選(7)

這篇具有很好參考價值的文章主要介紹了Rust 編程小技巧摘選(7)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Rust 編程小技巧摘選(7),Rust,rust,開發(fā)語言,后端

目錄

Rust 編程小技巧(7)

1. 交換變量

2. 翻轉(zhuǎn)數(shù)組

3. for_each() 用法

4. 結構體 Display trait

5. HashMap 和 BTreeMap

6.?遍歷輸出哈希表

7. 分離奇數(shù)和偶數(shù)

8. 判斷素數(shù)(質(zhì)數(shù))


Rust 編程小技巧(7)

1. 交換變量

與python, go等語言用法類似,不同的是rust不能省掉元組的括號 () 。

fn main() {
    let a = 3;
    let b = 23;
    println!("a: {}, b: {}", a, b);
    let (a, b) = (b, a);
    println!("a: {}, b: {}", a, b);
}

輸出:

a: 3, b: 23
a: 23, b: 3

2. 翻轉(zhuǎn)數(shù)組

fn main() {
    let x = vec!["Hello", "World"];
    let y: Vec<_> = x.iter().rev().collect();
    println!("{:?}\n{:?}", x, y);

    let mut z = vec![1,2,3];
    println!("{:?}", z);
    z.reverse();
    println!("{:?}", z);
}

輸出:

["Hello", "World"]
["World", "Hello"]
[1, 2, 3]
[3, 2, 1]?

3. for_each() 用法

fn main() {
    // 迭代一個 vec 并打印每個元素  
    let vec = vec![1, 2, 3, 4, 5];  
    vec.iter().for_each(|x| print!("{} ", x));
    println!();

    // 迭代一個字符串并打印每個字符  
    let s = "hello";  
    s.chars().for_each(|c| print!("{} ", c));
    println!();

    // 迭代一個 vec 并將其元素加倍  
    let mut v1 = vec![1, 2, 3, 4, 5];
    let mut v2 = vec![];
    v1.iter().for_each(|x| v2.push(x * 2));  
    println!("{:?}", v2);

    v1.clone().iter().for_each(|x| v1.push(x * 2));  
    println!("{:?}", v1);
}

輸出:

1 2 3 4 5?
h e l l o?
[2, 4, 6, 8, 10]
[1, 2, 3, 4, 5, 2, 4, 6, 8, 10]

4. 結構體 Display trait

結構體的兩種形式,對應的成員取法不同;

前者用 self.成員變量名 self.x, self.y;后者用 self.成員索引號 self.0, self.1, self.2, ......

use std::fmt::Display;
use std::fmt::Result;
use std::fmt::Formatter;

struct Point {
    x: f64,
    y: f64,
}

struct Point2(f64, f64);

impl Display for Point {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        write!(f, "({}, {})", self.x, self.y)
    }
}

impl Display for Point2 {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        write!(f, "({}, {})", self.0, self.1)
    }
}

fn main() {
    let p = Point { x: 2.0, y: -3.5 };
    println!("{}", p);

    let p = Point2(2.0, -3.5);
    println!("{}", p);
}

?輸出:

(2, -3.5)
(2, -3.5)

5. HashMap 和 BTreeMap

兩者都是 Rust 中的哈希表數(shù)據(jù)結構,它們的相同點:

都支持使用 Vec 或 String 作為鍵,也支持使用標準庫中的其他結構體作為鍵。
都支持使用 Option 類型作為鍵值對中的值。
都支持使用 HashMap 類型的成員函數(shù)來進行基本的操作,例如插入、刪除、查找、更新等。

不同點:

HashMap 使用哈希表(HashMap)算法來存儲鍵值對,而 BTreeMap 使用 B-TREE(B 樹)算法來存儲鍵值對。因此,BTreeMap 在查找、插入、刪除等操作上的性能比 HashMap 更好。

如果需要使用哈希表(HashMap)數(shù)據(jù)結構,但不需要按照鍵值對的順序來訪問,而且對查找、插入、刪除等操作的性能要求不高,那么可以使用 HashMap。如果需要使用哈希表(HashMap)數(shù)據(jù)結構,而且對查找、插入、刪除等操作的性能要求較高,而且需要按照鍵值對的順序來訪問,那么可以使用 BTreeMap。

示例:

use std::collections::BTreeMap;
use std::collections::HashMap;

fn main() {
    let mut x = BTreeMap::new();
    x.insert("one", 1);
    x.insert("two", 2);
    
    println!("{:?}", x);

    let x: HashMap<&str, i32> = [
        ("one", 1),
        ("two", 2),
    ].iter().cloned().collect();
    
    println!("{:?}", x);
}

輸出:

{"one": 1, "two": 2}
{"one": 1, "two": 2}

6.?遍歷輸出哈希表

在for...in...循環(huán)結構中使用元組(k, v)讀取對應鍵值對:

use std::collections::BTreeMap;
use std::collections::HashMap;
 
fn main() {
    let mut x = BTreeMap::new();
    x.insert("one", 1);
    x.insert("two", 2);
    x.insert("three", 3);
    x.insert("four", 4);
    for (k, v) in &x {
        println!("Key={}, Value={}", k, v);
    }
    println!();
    let x: HashMap<&str, i32> = [
        ("one", 1),
        ("two", 2),
        ("three", 3),
        ("four", 4),
    ].iter().cloned().collect();
    
    for (k, v) in &x {
        println!("Key={key}, Value={val}", key = k, val = v);
    }
}

輸出:

Key=four, Value=4
Key=one, Value=1
Key=three, Value=3
Key=two, Value=2

Key=three, Value=3
Key=two, Value=2
Key=one, Value=1
Key=four, Value=4

7. 分離奇數(shù)和偶數(shù)

.filter() 方法是一個在標準庫中的std::iter::Iterator trait的默認方法。這個方法會創(chuàng)建一個新的迭代器,包含所有滿足給定條件的元素。

示例:分離一個數(shù)組中的奇數(shù)和偶數(shù)

fn main() {
    let mut vec = vec![1, 2, 3, 4, 5];  
    vec.clone().iter().for_each(|x| vec.push(x + 5));  
    println!("{:?}", vec);

    fn is_even(x: &i32) -> bool { *x % 2 == 0 }
    fn print_x(x: &i32) { print!("{} ", x) }

    vec.iter().filter(|x| !is_even(x)).for_each(|x| print_x(x));
    println!();
    vec.iter().filter(|x| is_even(x)).for_each(|x| print_x(x));
    println!();
}

輸出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1 3 5 7 9?
2 4 6 8 10??

8. 判斷素數(shù)(質(zhì)數(shù))

.any() 方法是一個在標準庫中的std::iter::Iterator trait的默認方法。這個方法會檢查迭代器中是否有元素滿足給定的條件,如果有元素滿足條件,它就會返回true,否則返回false。

示例:求30以內(nèi)的質(zhì)數(shù)

fn is_prime(n: u64) -> bool {
    match n {
        0..=1 => false,
        _ => !(2..n).any(|d| n % d == 0),
    }
}

fn main() {
    for i in 1..=30 {
        if is_prime(i) {
            print!("{} ", i);
        }
    }
    println!();
}

輸出:

2 3 5 7 11 13 17 19 23 29?


相關閱讀:

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博客

Rust 編程小技巧摘選(6)_Hann Yang的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-631959.html

到了這里,關于Rust 編程小技巧摘選(7)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Rust 編程小技巧摘選(5)

    Rust 編程小技巧摘選(5)

    目錄 Rust 編程小技巧(5)? 使用 vec 的 push 方法 使用 String 的 append 方法 使用 push_str 拼接字符串 使用 Result 的 and_then 方法 使用 Option 的 map 方法 使用 match 和 enums 來匹配不同類型 使用 Option 的 or 方法組合多個 Option 使用 Result 的 map 方法轉(zhuǎn)換成功值 使用 AsRef 和 Borrow ? 使用 vec

    2024年02月14日
    瀏覽(30)
  • 【Rust 基礎篇】Rust FFI:連接Rust與其他編程語言的橋梁

    Rust是一種以安全性和高效性著稱的系統(tǒng)級編程語言,具有出色的性能和內(nèi)存安全特性。然而,在現(xiàn)實世界中,我們很少有項目是完全用一種編程語言編寫的。通常,我們需要在項目中使用多種編程語言,特別是在與現(xiàn)有代碼庫或底層系統(tǒng)交互時。為了實現(xiàn)跨語言的互操作性,

    2024年02月15日
    瀏覽(29)
  • Rust編程語言入門之無畏并發(fā)

    Concurrent:程序的不同部分之間獨立的執(zhí)行(并發(fā)) Parallel:程序的不同部分同時運行(并行) Rust無畏并發(fā):允許你編寫沒有細微Bug的代碼,并在不引入新Bug的情況下易于重構 注意:本文中的”并發(fā)“泛指 concurrent 和 parallel 在大部分OS里,代碼運行在進程(process)中,OS同時

    2023年04月19日
    瀏覽(24)
  • Rust編程語言入門之高級特性

    不安全 Rust 高級 Trait 高級 類型 高級函數(shù)和閉包 宏 隱藏著第二個語言,它沒有強制內(nèi)存安全保證:Unsafe Rust(不安全的 Rust) 和普通的 Rust 一樣,但提供了額外的“超能力” Unsafe Rust 存在的原因: 靜態(tài)分析是保守的。 使用 Unsafe Rust:我知道自己在做什么,并承擔相應風險

    2023年04月24日
    瀏覽(21)
  • Rust編程語言入門之模式匹配

    模式是Rust中的一種特殊語法,用于匹配復雜和簡單類型的結構 將模式與匹配表達式和其他構造結合使用,可以更好地控制程序的控制流 模式由以下元素(的一些組合)組成: 字面值 解構的數(shù)組、enum、struct 和 tuple 變量 通配符 占位符 想要使用模式,需要將其與某個值進行

    2023年04月22日
    瀏覽(23)
  • Rust編程語言入門之智能指針

    指針:一個變量在內(nèi)存中包含的是一個地址(指向其它數(shù)據(jù)) Rust 中最常見的指針就是”引用“ 引用: 使用 借用它指向的值 沒有其余開銷 最常見的指針類型 智能指針是這樣一些數(shù)據(jù)結構: 行為和指針相似 有額外的元數(shù)據(jù)和功能 通過記錄所有者的數(shù)量,使一份數(shù)據(jù)被多個

    2023年04月16日
    瀏覽(26)
  • 【編程】Rust語言入門第4篇 字符串

    Rust 中的字符是 Unicode 類型,因此每個字符占據(jù) 4 個字節(jié)內(nèi)存空間,但字符串不一樣,字符串是 UTF-8 編碼,也就是字符串中的字符所占的字節(jié)數(shù)是變化的(1 - 4)。 常見的字符串有兩種: str,通常是引用類型, str ,即字符串字面常量,字符串切片。 std::string::String 類型 str 的變

    2024年02月20日
    瀏覽(25)
  • 【跟小嘉學 Rust 編程】十七、面向?qū)ο笳Z言特性

    【跟小嘉學 Rust 編程】一、Rust 編程基礎 【跟小嘉學 Rust 編程】二、Rust 包管理工具使用 【跟小嘉學 Rust 編程】三、Rust 的基本程序概念 【跟小嘉學 Rust 編程】四、理解 Rust 的所有權概念 【跟小嘉學 Rust 編程】五、使用結構體關聯(lián)結構化數(shù)據(jù) 【跟小嘉學 Rust 編程】六、枚舉

    2024年02月10日
    瀏覽(35)
  • 如何在 macOS 上安裝 Rust 編程語言

    如何在 macOS 上安裝 Rust 編程語言

    安裝Rust編程語言在Mac上是一個相對簡單的過程,但它可能會涉及多個步驟。在本文中,我將詳細說明如何在Mac上安裝Rust,并提供一些常見問題的解決方法。請注意,由于軟件和工具可能會發(fā)生變化,因此建議首先查看Rust官方網(wǎng)站以獲取最新的安裝說明。 目錄 1.打開終端 2

    2024年02月01日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包