#map #fixed-size #structure #data #no-std

no-std array_map

基于数组的固定大小键Map,具有O(1)性能

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

Download history 149/week @ 2024-03-13 485/week @ 2024-03-20 208/week @ 2024-03-27 157/week @ 2024-04-03 269/week @ 2024-04-10 174/week @ 2024-04-17 231/week @ 2024-04-24 328/week @ 2024-05-01 113/week @ 2024-05-08 186/week @ 2024-05-15 219/week @ 2024-05-22 429/week @ 2024-05-29 319/week @ 2024-06-05 136/week @ 2024-06-12 202/week @ 2024-06-19 91/week @ 2024-06-26

每月下载量819

MIT/Apache

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