Rust 迭代take - 控制迭代次數
take具有控制迭代器迭代次數的功能
被歸類在iter
take
文件[1]這樣解釋take
創造一個迭代器,迭代前n個元素
如果原本迭代器比較少則會直接迭代完
self為一個迭代器
n為迭代次數
回傳一個Take迭代器[2]
Take 也是一個迭代器
於Struct std::iter::Take
用處為回傳迭代器前n個元素
舉個例子
假設有個數組,只想要取其前五個
可以這樣打
透過第二行將數組放入迭代器中
並使用take取出前五個
而如果輸入數字超出數組範圍
也不會有Panic
最多就是輸出數組全部
舉一個比較複雜一點的例子
假設銀行有使用者姓名還有他們資產總額
希望取出前三個存款最多的人,但不能有負債
使用take為其中一種解法
users共有六個人,以及他們的金額
先透過sort_by[3]從大到小排列
將其放入數組,透過filter[4]判斷其資產是正數還是負數
並且取前三個
只有兩個人資產是正數
因此結果為
實際題目
寫這篇是因為CodeWars有一題我覺得蠻有趣的
Training on Find The Parity Outlier | Codewars
難度是6kyu
題目為
You are given an array (which will have a length of at least 3, but could be very large) containing integers. The array is either entirely comprised of odd integers or entirely comprised of even integers except for a single integer N. Write a method that takes the array as an argument and returns this "outlier" N.
Examples
[2, 4, 0, 100, 4, 11, 2602, 36] --> 11 (the only odd number)
[160, 3, 1719, 19, 11, 13, -21] --> 160 (the only even number)
意思有一個數組,裡面幾乎都是偶數會奇數
只會有一個數跟其他數值不一樣
當整個數值是偶數時,有一個奇數混在裡面
當整個數值是奇數時,有一個偶數混在裡面
要找出裡面那個混在裡面的小兔崽子
fn find_outlier(values: &[i32]) -> i32 {}
可以透過這個測試測看看程式
解答:
先使用take(3)判斷前面三個數值是偶數還是奇數
並記錄在odd_or_even
之後透過find找出跟前三個數值不同的數字
最後unwrap輸出
參考資料
[1] https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.take
[2] https://doc.rust-lang.org/std/iter/struct.Take.html
[3] https://lageeblog.blogspot.com/2023/11/rust-sortsortby.html
[4] https://lageeblog.blogspot.com/2023/10/rust-filter.html
[5] https://www.codewars.com/kata/5526fc09a1bbd946250002dc/train/rust
0 comments:
張貼留言