10个不稳定版本 (3个破坏性更新)
0.4.0 | 2022年3月24日 |
---|---|
0.3.4 | 2021年9月27日 |
0.3.2 | 2021年8月31日 |
0.3.0 | 2021年7月7日 |
0.1.0 | 2021年5月19日 |
在数据结构中排名第835
每月下载量819次
60KB
1.5K SLoC
array_map
no_std
兼容的基于数组的Map和Set。
随着更多const-generic功能的可用,此crate将不断发展。
这特别适用于您有一个裸枚举,其中您想要将每个键视为一个字段的情况
use array_map::*;
#[repr(u8)]
#[derive(Indexable)]
enum DetectionType {
Person,
Vehicle,
Bicycle,
}
let thresholds = ArrayMap::<DetectionType, f32, {DetectionType::count()}>::from_closure(|dt| match dt {
DetectionType::Person => 0.8,
DetectionType::Vehicle => 0.9,
DetectionType::Bicycle => 0.7,
});
let person_threshold = thresholds[DetectionType::Person];
这也可以用来缓存一些常见的计算。(这比在aarch64上执行计算快2倍)
use array_map::*;
let u8_to_f32_cache = ArrayMap::<u8, f32, {u8::SIZE}>::from_closure(|u|f32::from(*u) / 255.0);
let bytes = vec![0_u8; 1024];
// take some bytes and convert them to f32
let floats = bytes.iter().copied().map(|b|u8_to_f32_cache[b]).collect::<Vec<_>>();
依赖项
~175KB