#集合 #交集 #列表 #差集 #表示 #概念 #计算

key_set

KeySet表示全集合、空集合、Some(list)和AllExceptSome(list)的概念,带有基本的集合计算(交集、差集、逆集)

1 个不稳定版本

0.1.0 2020年12月7日

#2235数据结构

MIT/Apache

14KB
239

Rust包key_set

KeySet表示全集合、空集合、Some(list)和AllExceptSome(list)的概念,带有基本的集合计算(交集、差集、逆集)。

GitHub仓库见此处

其他版本

用法

我们有一个枚举

  • KeySet::All表示所有可能的键(𝕌
  • KeySet::None表示一个空集合(
  • KeySet::Some(vec)表示一个具体集合(A ⊂ 𝕌
  • KeySet::AllExceptSome(vec)表示集合的补集,除了给定的元素之外的所有元素(A' = {x ∈ 𝕌 | x ∉ A})_(见维基百科中的补集)*

我们可以有一个T类型的KeySet,其中T: Ord + Debug + Clone

KeySet实现了cmp::Ordcmp::PartialOrdcmp::Eqcmp::PartialEqstd::fmt::Debugstd::fmt::Display

创建: KeySet::for_some(&list), KeySet::for_all_except_some(&list)

使用工厂函数构建您的KeySet,给出

  • 要获取表示给定列表的KeySet: KeySet::for_some(&list)
    • 如果列表为空,我们将得到 None
    • 否则,我们将得到 Some
  • 要获取表示给定列表的补集的KeySet: KeySet::for_all_except_some(&list)
    • 如果列表为空,我们将得到 All
    • 否则,我们将得到 AllExceptSome
fn example() {
    let empty_vector: Vec<i32> = vec![];

    let ks1 = KeySet::for_some(&empty_vector); // => KeySet::None
    let ks2 = KeySet::for_some(&vec![1, 2, 3]); // => KeySet::Some([1, 2, 3])
    let ks3 = KeySet::for_all_except_some(empty_vector); // => KeySet::All
    let ks4 = KeySet::for_all_except_some(&vec![1, 2, 3]); // => KeySet::AllExceptSome([1, 2, 3])
}

包含(&元素)

返回一个布尔值,定义KeySet是否包含给定的元素。

fn example() {
    let ks1 = KeySet::for_some(vec![1, 2, 3]); // => KeySet::Some([1, 2, 3])
    ks1.contains(&1); // => true
    ks1.contains(&7); // => false

    let ks2: KeySet<i32> = KeySet::All;
    ks2.contains(&1); // => true
    ks2.contains(&7); // => true

    let ks3: KeySet<i32> = KeySet::None;
    ks3.contains(&1); // => false
    ks3.contains(&7); // => false
    
    let ks4 = KeySet::for_all_except_some(vec![1, 2, 3]); // => KeySet::AllExceptSome([1, 2, 3])
    ks4.contains(&1); // => false
    ks4.contains(&7); // => true
}

取反()

所有KeySet都有一个 invert() 方法,该方法返回相反类的实例,表示补集KeySet。(参见 维基百科上的补集

  • AllNone
  • SomeAllExceptSome
fn example() {
    let key_set = KeySet::for_some(vec![1, 2, 3]); // => KeySet::Some([1, 2, 3])
    let comp = key_set.clone(); // => KeySet::AllExceptSome([1, 2, 3])
}

移除(&其他)

返回一个新的KeySet,表示ThisSet - OtherSet的差 (A - B)

fn example() {
    let key_set = KeySet::for_some(vec![1, 2, 3]); // => KeySet::Some([1, 2, 3])
    let other = KeySet::for_some(vec![1, 3, 4]); // => KeySet::Some([1, 2, 3])
    let comp = key_set.remove(&other); // => KeySet::Some([2])
}

交集(&其他)

返回一个新的KeySet,表示两个集合的交集 (A ∩ B),表示两个集合中存在的元素

fn example() {
    let key_set = KeySet::for_some(vec![1, 2, 3]); // => KeySet::Some([1, 2, 3])
    let other = KeySet::for_some(vec![1, 3, 4]); // => KeySet::Some([1, 2, 3])
    let comp = key_set.intersect(&other); // => KeySet::Some([1, 3])
}

克隆()

所有KeySet都有一个 clone() 方法,该方法将返回一个表示相同KeySet的新实例。

如果KeySet是 KeySetSomeKeySetAllExceptSome,它们将有一个包含相同键的向量。

fn example() {
    let key_set = KeySet::for_some(vec![1, 2, 3]); // => KeySet::Some([1, 2, 3])
    let comp = key_set.clone(); // => KeySet::Some([1, 2, 3])
    let equal = key_set == comp; // => true
}

依赖项

~0.4–1MB
~22K SLoC