Crates.io | lookups |
lib.rs | lookups |
version | 0.2.0 |
source | src |
created_at | 2024-01-08 16:04:08.351981 |
updated_at | 2024-04-09 12:52:57.564858 |
description | Improve the data retrieval operations for collections. |
homepage | |
repository | https://github.com/lima1909/lookups |
max_upload_size | |
id | 1092731 |
size | 75,148 |
Improve the data retrieval operations for collections.
lookups is a crate for extending already existing collections (std::vec::Vec
, std::collections::HashMap
, ...)
with additional lookup functionalities, so you have a faster access to your data as with an iterator
or a search algorithm
.
This wrapper is just as easy to use as the given (original) collection.
The fast access can be achieved by using different methods, like;
use lookups::{LkupHashMap, IndexLookup, Lookup};
#[derive(PartialEq, Debug)]
struct Car {
id: usize,
name: String,
}
// create a new Lookup HashMap with a unique lookup `Key`: `Car::id` (usize)
let mut map = LkupHashMap::new(IndexLookup::with_unique_key() ,|c: &Car| c.id);
map.insert(String::from("BMW"), Car{id: 0, name: "BMW".into()});
map.insert(String::from("Audi"), Car{id: 5, name: "Au".into()});
map.insert(String::from("VW"), Car{id: 2, name: "VW".into()});
// conventionally HashMap access with Key (name: String)
assert!(map.contains_key("VW"));
// lookup with Key (id: usize)
assert!(map.contains_lkup_key(2));
// update one entry by lookup-key
assert_eq!(1, map.update_by_key(5, |c| c.name = "Audi".into()));
// get a Car by an given: id
assert_eq!(Some(&Car{id: 5, name: "Audi".into()}), map.get_by_lkup_key(5).next());
// create a View: a subset from the Lookups (defined by the given Keys)
let view = map.create_lkup_view([0, 2]);
assert_eq!(Some(&Car{id: 0, name: "BMW".into()}), view.get_by_key(0).next());
assert_eq!(vec![&Car{id: 0, name: "BMW".into()}, &Car{id: 2, name: "VW".into()}],
view.items().collect::<Vec<_>>());
// get min and max key
assert_eq!(Some(0), view.min_key());
assert_eq!(Some(2), view.max_key());