Crates.io | valord-map |
lib.rs | valord-map |
version | 0.10.0 |
source | src |
created_at | 2024-05-13 08:43:39.463114 |
updated_at | 2024-06-18 09:19:36.01088 |
description | A dictionary sorted by values. |
homepage | |
repository | https://github.com/tediou5/valord-map |
max_upload_size | |
id | 1238164 |
size | 43,933 |
A dictionary sorted by values.
You can directly sort based on your data structure or implement OrdBy to specify sorting based on a particular field.
use valord_map::{OrdBy, ValordMap};
#[derive(Debug, PartialEq)]
struct People {
age: u8,
name: String,
}
impl OrdBy for People {
type Target = u8;
fn ord_by<'a>(&'a self) -> Self::Target {
self.age
}
}
let mut peoples = ValordMap::new();
peoples.insert(
1,
People {
age: 18,
name: "qians1".to_string(),
},
);
peoples.insert(
2,
People {
age: 19,
name: "qians2".to_string(),
},
);
peoples.insert(
3,
People {
age: 20,
name: "qians3".to_string(),
},
);
peoples.insert(
4,
People {
age: 21,
name: "qians4".to_string(),
},
);
peoples.insert(
5,
People {
age: 22,
name: "qians5".to_string(),
},
);
let youngest = peoples.first();
assert_eq!(youngest.len(), 1);
assert_eq!(
youngest[0],
(
&1,
&People {
age: 18,
name: "qians1".to_string(),
}
)
);
let oldest = peoples.last();
assert_eq!(oldest.len(), 1);
assert_eq!(
oldest[0],
(
&5,
&People {
age: 22,
name: "qians5".to_string(),
}
)
);
peoples
.iter_mut()
.for_each(|mut people_ref_mut| people_ref_mut.age += 1);
let youngest = peoples.first();
assert_eq!(youngest.len(), 1);
assert_eq!(
youngest[0],
(
&1,
&People {
age: 19,
name: "qians1".to_string(),
}
)
);
let oldest = peoples.last();
assert_eq!(oldest.len(), 1);
assert_eq!(
oldest[0],
(
&5,
&People {
age: 23,
name: "qians5".to_string(),
}
)
);
let range: Vec<_> = peoples.range(22..).collect();
assert_eq!(range.len(), 2);
println!("range: {range:?}");
let range: Vec<_> = peoples
.range_mut(22..)
.map(|mut rm_p| {
let (k, v) = rm_p.get_mut_with_key();
v.age = 30;
(k.clone(), v.name.clone(), v.age)
})
.collect();
println!("range mut: {range:?}");
let oldest = peoples.last();
assert_eq!(oldest.len(), 2);
assert_eq!(oldest[0].1.age, 30);
assert_eq!(oldest[1].1.age, 30);
println!("peoples: {:?}", peoples.iter().collect::<Vec<_>>());