隱私權政策

搜尋此網誌

技術提供:Blogger.

關於我自己

我的相片
目前從事軟體相關行業,喜歡閱讀、健身、喝調酒。習慣把遇到的問題記下來,每天做一些整理方便自己以後查。 Python、Rust、Kotlin等程式語言皆為自學,目前比較著重在Rust語言,歡迎一起討論。

2023年11月10日 星期五

Rust 迭代step_by概述 - 用於迭代器遞增值


step_by

step_by為建立一個同樣起點的迭代器

但會根據指定數值遞增

例如for迴圈想要等差值為2

就很適合用step_by

文件[1]這樣描述

    fn step_by(self, step: usize) -> StepBy<Self>
    where
        Self: Sized,

self為本身迭代器

step為遞增值

最後回傳StepBy迭代器


Python例子

在Python中

如果要用for迴圈把0 2 4 6 8給印出來

通常會這樣

    for i in range(0,10,2):
        print("Numbers: ", i)
Numbers: 0 Numbers: 2 Numbers: 4 Numbers: 6 Numbers: 8

Rust實現

透過range設定最小值0以及最大值10,最後一個數字2表示遞增值

因此可以每兩個數字印出來

而這種打法在Rust則是這樣打

    for i in (0..10).step_by(2){
        println!("Numbers: {}", i);
    }
Numbers: 0 Numbers: 2 Numbers: 4 Numbers: 6 Numbers: 8


例子

而step_by也可以用在iter上

應該說他本來就是被歸類在iter

假設有一個沒有規律的數組

希望每兩個取一個

則可以這樣

    let list = vec![0, 5, 8, 6, 7, 5, 3, 9, 4];
    let res = list.iter().step_by(2).collect::<Vec<_>>();
    println!("res: {:?}", res);

第一行為數組

第二行將數組放入迭代器iter()中

透過step_by(2)每兩個取一個,最後放入一個數組中

將其println!出來可以看到結果為

res: [0, 8, 7, 3, 4]


參考資料

[1] https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.step_by

0 comments:

張貼留言