隱私權政策

搜尋此網誌

技術提供:Blogger.

關於我自己

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

2023年11月2日 星期四

Rust 迭代enumerate概述 - 將數組中的值編號


enumerate是一個常用於迭代器的方法

文件[1]這樣寫

建立一個迭代器,並返回當下的迭代數以及值

fn enumerate(self) -> Enumerate<Self>

self為一個迭代器

enumerate為返回一個Enumerate迭代器,返回兩個值,索引值以及元素值


範例

若我有學生名字,希望自動歸類他們的座號

就可以使用enumerate

    let names = vec!["Alice", "Bob", "Charlie"];
    for (index, name) in names.iter().enumerate() {
        println!("Index: {}, Name: {}", index, name);
    }

第一行創建一個數組,裡面包含名字Alice、Bob、Charlie

第二行for迴圈,將名字透過iter放入迭代器

並透過enumerate對其取索引值給index,名字給name

則會依次顯示

Index: 0, Name: Alice  

Index: 1, Name: Bob    

Index: 2, Name: Charlie

enumerate在需要知道元素的索引值很好用

使我們可以同時訪問索引值和元素值

假設現在有個題目,希望取得數組中最大值以及其索引值

    let numbers = vec![10, 25, 5, 32, 8, 15];

就可以透過enumerate尋找

    if let Some((max_index, max_value)) =
        numbers.iter().enumerate().max_by_key(|&(_, &value)| value)
    {
        println!("Max value: {} at index: {}", max_value, max_index);
    } else {
        println!("No maximum value found.");
    }

第二行,先將數組放入迭代器

使用enumerate取得索引值,會輸出

(0, 10)

(1, 25)

(2, 5)

(3, 32)

(4, 8)

(5, 15)

並透過max_by_key[2]方法找出最大元素,透過閉包|&(_, &value)| value指定要找的元素

最後返回(3, 32)

最後輸出

Max value: 32 at index: 3


參考資料




0 comments:

張貼留言