You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
miguel 166a10990f fix(piscine-rust): add crates to exercises 6 months ago
..
README.md fix(piscine-rust): add crates to exercises 6 months ago
main.rs fix(piscine-rust): add crates to exercises 6 months ago

README.md

filter_table

Instructions

  • Define the associated functions for the Table struct:
    • new: which creates a new empty table.
    • add_rows: which adds a new row to the table from a slice of strings.
    • filter_cols: which receives a closure and returns a table with all the columns that yielded true when applying that closure. The closure will receive a &str and return a bool value.
    • filter_rows: which receives a closure and returns a table with all the rows that yielded true when applied to the elements of the selected column. The closure will receive a &str and return a bool value.

Expected functions and Structures

#[derive(Clone, Debug, PartialEq)]
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: T) -> Option<Self> {

	}

	pub fn filter_row(&self, col_name: &str, filter: T) -> Option<Self> {

	}
}

Usage

Here is a possible program to test your function:

use filter_table::*;

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:

$ 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"]] })
$