#finite #exhaustive #map

exhaustive-map

有限居民类型的完备映射

3个不稳定版本

0.2.1 2024年5月16日
0.2.0 2024年5月16日
0.1.1 2024年4月16日

#470数据结构

Download history 5/week @ 2024-04-20 239/week @ 2024-05-11 50/week @ 2024-05-18 3/week @ 2024-05-25 2/week @ 2024-06-08 1/week @ 2024-06-15

110 每月下载量

MIT/Apache

36KB
900

exhaustive-map 最新版本 API文档

有限居民类型的完备映射。

使用示例

use exhaustive_map::ExhaustiveMap;

let mut map = ExhaustiveMap::<u8, u16>::from_fn(|i| i as u16 + 100);
assert_eq!(map.len(), 256);

assert_eq!(map[3], 103);

map[7] = 9999;
assert_eq!(map[7], 9999);

map.swap(7, 3);
assert_eq!(map[3], 9999);
assert_eq!(map[7], 103);

键类型必须实现Finite特质。您可以使用 derive 为自己的类型实现它

use exhaustive_map::{Finite, FiniteExt};

#[derive(Finite, Debug, PartialEq)]
enum Color {
    Red,
    Green,
    Blue,
}

let all: Vec<_> = Color::iter_all().collect();
assert_eq!(all, vec![Color::Red, Color::Green, Color::Blue]);

Finite特质也可以手动实现:或手动实现

use exhaustive_map::Finite;

#[derive(Debug, PartialEq)]
enum Color {
    Red,
    Green,
    Blue,
}

impl Finite for Color {
    const INHABITANTS: usize = 3;

    fn to_usize(&self) -> usize {
        match self {
            Self::Red => 0,
            Self::Green => 1,
            Self::Blue => 2,
        }
    }

    fn from_usize(i: usize) -> Option<Self> {
        Some(match i {
            0 => Self::Red,
            1 => Self::Green,
            2 => Self::Blue,
            _ => return None,
        })
    }
}

依赖关系

~250–690KB
~16K SLoC