Edited the iterator.md

This commit is contained in:
Tanish-Eagle 2022-11-30 20:51:38 +05:30
parent 1a5bdaaf77
commit eb00e97b2a
1 changed files with 24 additions and 24 deletions

View File

@ -11,7 +11,7 @@ fn main() {
} }
``` ```
In above code, You may consider `for` as a simple loop, but actually it is iterating over a iterator. In the code above, You may consider `for` as a simple loop, but actually it is iterating over a iterator.
By default `for` will apply the `into_iter` to the collection, and change it into a iterator. As a result, the following code is equivalent to previous one: By default `for` will apply the `into_iter` to the collection, and change it into a iterator. As a result, the following code is equivalent to previous one:
```rust ```rust
@ -23,18 +23,18 @@ fn main() {
} }
``` ```
1γ€πŸŒŸ 1.🌟
```rust,editable ```rust,editable
/* Refactoring the following code using iterators */ /* Refactoring the following code using iterators */
fn main() { fn main() {
let arr = [0; 10]; let arr = [0; 10];
for i in 0..arr.len() { for i in 0..arr.len() {
println!("{}",arr[i]) println!("{}",arr[i]);
} }
} }
``` ```
2、 🌟 One of the easiest ways to create an iterator is to use the range notion: `a..b`. 2. 🌟 One of the easiest ways to create an iterator is to use the range notion: `a..b`.
```rust,editable ```rust,editable
/* Fill in the blank */ /* Fill in the blank */
fn main() { fn main() {
@ -55,13 +55,13 @@ pub trait Iterator {
fn next(&mut self) -> Option<Self::Item>; fn next(&mut self) -> Option<Self::Item>;
// methods with default implementations elided // Methods with default implementations elided
} }
``` ```
And we can call the `next` method on iterators directly. And we can call the `next` method on iterators directly.
3γ€πŸŒŸπŸŒŸ 3.🌟🌟
```rust,editable ```rust,editable
/* Fill the blanks and fix the errors. /* Fill the blanks and fix the errors.
Using two ways if possible */ Using two ways if possible */
@ -75,28 +75,28 @@ fn main() {
``` ```
## into_iter, iter and iter_mut ## into_iter, iter and iter_mut
In the previous section, we have mentioned that `for` will apply the `into_iter` to the collection, and change it into a iterator.However, this is not the only way to convert collections into iterators. In the previous section, we have mentioned that `for` will apply the `into_iter` to the collection, and change it into a iterator. However, this is not the only way to convert collections into iterators.
`into_iter`, `iter`, `iter_mut`, all of them can convert an collection into iterator, but in different ways. `into_iter`, `iter`, `iter_mut`, all of them can convert a collection into iterator, but in different ways.
- `into_iter` cosumes the collection, once the collection has been comsumed, it is no longer available for reuse, because its ownership has been moved within the loop. - `into_iter` consumes the collection, once the collection has been consumed, it is no longer available for reuse, because its ownership has been moved within the loop.
- `iter`, this borrows each element of the collection through each iteration, thus leaving the collection untouched and available for reuse after the loop - `iter`, this borrows each element of the collection through each iteration, thus leaving the collection untouched and available for reuse after the loop
- `iter_mut`, this mutably borrows each element of the collection, allowing for the collection to be modified in place. - `iter_mut`, this mutably borrows each element of the collection, allowing for the collection to be modified in place.
4γ€πŸŒŸ 4.🌟
```rust,editable ```rust,editable
/* Make it work */ /* Make it work */
fn main() { fn main() {
let arr = vec![0; 10]; let arr = vec![0; 10];
for i in arr { for i in arr {
println!("{}", i) println!("{}", i);
} }
println!("{:?}",arr); println!("{:?}",arr);
} }
``` ```
5γ€πŸŒŸ 5.🌟
```rust,editable ```rust,editable
/* Fill in the blank */ /* Fill in the blank */
fn main() { fn main() {
@ -113,7 +113,7 @@ fn main() {
} }
``` ```
6γ€πŸŒŸπŸŒŸ 6.🌟🌟
```rust,editable ```rust,editable
/* Fill in the blank */ /* Fill in the blank */
fn main() { fn main() {
@ -130,7 +130,7 @@ fn main() {
## Creating our own iterator ## Creating our own iterator
We can not only create iterators from collections types, but also can create iterators by implementing the `Iterator` trait on our own types. We can not only create iterators from collection's types, but also can create iterators by implementing the `Iterator` trait on our own types.
**Example** **Example**
```rust ```rust
@ -169,7 +169,7 @@ fn main() {
} }
``` ```
7γ€πŸŒŸπŸŒŸπŸŒŸ 7.🌟🌟🌟
```rust,editable ```rust,editable
struct Fibonacci { struct Fibonacci {
curr: u32, curr: u32,
@ -208,8 +208,8 @@ The `Iterator` trait has a number of methods with default implementations provid
### Consuming adaptors ### Consuming adaptors
Some of these methods call the method `next`to use up the iterator, so they are called *consuming adaptors*. Some of these methods call the method `next`to use up the iterator, so they are called *consuming adaptors*.
8γ€πŸŒŸπŸŒŸ 8.🌟🌟
```rust,edtiable ```rust,editable
/* Fill in the blank and fix the errors */ /* Fill in the blank and fix the errors */
fn main() { fn main() {
let v1 = vec![1, 2, 3]; let v1 = vec![1, 2, 3];
@ -226,10 +226,10 @@ fn main() {
``` ```
#### collect #### Collect
Other than converting a collection into an iterator, we can also `collect` the result values into a collection, `collect` will cosume the iterator. Other than converting a collection into an iterator, we can also `collect` the result values into a collection, `collect` will consume the iterator.
9γ€πŸŒŸπŸŒŸ 9.🌟🌟
```rust,editable ```rust,editable
/* Make it work */ /* Make it work */
use std::collections::HashMap; use std::collections::HashMap;
@ -251,9 +251,9 @@ fn main() {
### Iterator adaptors ### Iterator adaptors
Methods allowing you to change one iterator into another iterator are known as *iterator adaptors*. You can chain multiple iterator adaptors to perform complex actions in a readable way. Methods allowing you to change one iterator into another iterator are known as *iterator adaptors*. You can chain multiple iterator adaptors to perform complex actions in a readable way.
But because **all iterators are lazy**, you have to call one of the consuming adapers to get results from calls to iterator adapters. But because **all iterators are lazy**, you have to call one of the consuming adapters to get results from calls to iterator adapters.
10γ€πŸŒŸπŸŒŸ 10.🌟🌟
```rust,editable ```rust,editable
/* Fill in the blanks */ /* Fill in the blanks */
fn main() { fn main() {
@ -265,7 +265,7 @@ fn main() {
} }
``` ```
11γ€πŸŒŸπŸŒŸ 11.🌟🌟
```rust ```rust
/* Fill in the blanks */ /* Fill in the blanks */
use std::collections::HashMap; use std::collections::HashMap;
@ -281,7 +281,7 @@ fn main() {
#### Using closures in iterator adaptors #### Using closures in iterator adaptors
12γ€πŸŒŸπŸŒŸ 12.🌟🌟
```rust ```rust
/* Fill in the blanks */ /* Fill in the blanks */
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]