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

无std array_map_derive

固定大小键的O(1)性能支持的数组映射

4个版本 (破坏性)

0.4.0 2022年3月24日
0.3.0 2021年7月7日
0.2.0 2021年5月25日
0.1.0 2021年5月19日

#107 in #fixed-size

Download history 167/week @ 2024-04-08 268/week @ 2024-04-15 135/week @ 2024-04-22 347/week @ 2024-04-29 155/week @ 2024-05-06 188/week @ 2024-05-13 218/week @ 2024-05-20 356/week @ 2024-05-27 347/week @ 2024-06-03 181/week @ 2024-06-10 185/week @ 2024-06-17 82/week @ 2024-06-24 156/week @ 2024-07-01 224/week @ 2024-07-08 440/week @ 2024-07-15 577/week @ 2024-07-22

1,397 每月下载量
array_map 中使用

MIT/Apache

14KB
258 代码行

array_map

no_std 兼容的基于数组的Map和Set。

随着更多const泛型功能的可用,该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上计算的两倍快)

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<_>>();

依赖项

~1.5MB
~35K SLoC