forked from root/public
Augusto
3 years ago
2 changed files with 87 additions and 2 deletions
@ -0,0 +1,85 @@ |
|||||||
|
## filter_table |
||||||
|
|
||||||
|
### Instructions |
||||||
|
|
||||||
|
- Define the functions: |
||||||
|
|
||||||
|
- new: creates a new empty table. |
||||||
|
|
||||||
|
- add_rows: adds a new row to the table from a slice of strings. |
||||||
|
|
||||||
|
- filter_cols: that receives a closure that receives a `&str` and returns a `bool` value: |
||||||
|
|
||||||
|
- filter_cols returns a table with all the columns that yielded true when applied to the header. |
||||||
|
|
||||||
|
- filter_rows: that receives a closure that receives a `&str` and returns a `bool` value |
||||||
|
|
||||||
|
- filter_rows returns a table with all the columns that yielded true when applied to the elements of the selected column. |
||||||
|
|
||||||
|
### Expected function |
||||||
|
|
||||||
|
```rust |
||||||
|
pub struct Table { |
||||||
|
pub headers: Vec<String>, |
||||||
|
pub body: Vec<Vec<String>>, |
||||||
|
} |
||||||
|
|
||||||
|
impl Table { |
||||||
|
pub fn new() -> Table { |
||||||
|
} |
||||||
|
|
||||||
|
pub fn add_row(&mut self, row: &[String]) { |
||||||
|
} |
||||||
|
|
||||||
|
pub fn filter_col(&self, filter: ) -> Option<Self> { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
pub fn filter_row(&self, col_name: &str, filter: ) -> Option<Self> { |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
### Usage |
||||||
|
|
||||||
|
Here is a possible test for your function: |
||||||
|
|
||||||
|
```rust |
||||||
|
fn main() { |
||||||
|
let mut table = Table::new(); |
||||||
|
table.headers = vec![ |
||||||
|
"Name".to_string(), |
||||||
|
"Last Name".to_string(), |
||||||
|
"ID Number".to_string(), |
||||||
|
]; |
||||||
|
table.add_row(&[ |
||||||
|
"Adam".to_string(), |
||||||
|
"Philips".to_string(), |
||||||
|
"123456789".to_string(), |
||||||
|
]); |
||||||
|
table.add_row(&[ |
||||||
|
"Adamaris".to_string(), |
||||||
|
"Shelby".to_string(), |
||||||
|
"1111123456789".to_string(), |
||||||
|
]); |
||||||
|
table.add_row(&[ |
||||||
|
"Ackerley".to_string(), |
||||||
|
"Philips".to_string(), |
||||||
|
"123456789".to_string(), |
||||||
|
]); |
||||||
|
let filter_names = |col: &str| col == "Name"; |
||||||
|
println!("{:?}", table.filter_col(filter_names)); |
||||||
|
|
||||||
|
let filter_philips = |lastname: &str| lastname == "Philips"; |
||||||
|
println!("{:?}", table.filter_row("Last Name", filter_philips)); |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
And its output: |
||||||
|
|
||||||
|
```console |
||||||
|
student@ubuntu:~/[[ROOT]]/test$ cargo run |
||||||
|
Some(Table { headers: ["Name"], body: [["Adam"], ["Adamaris"], ["Ackerley"]] }) |
||||||
|
Some(Table { headers: ["Name", "Last Name", "ID Number"], body: [["Adam", "Philips", "123456789"], ["Ackerley", "Philips", "123456789"]] }) |
||||||
|
student@ubuntu:~/[[ROOT]]/test$ |
||||||
|
``` |
Loading…
Reference in new issue