Crates.io | key_set |
lib.rs | key_set |
version | 0.1.0 |
source | src |
created_at | 2020-12-07 03:18:34.256554 |
updated_at | 2020-12-07 03:18:34.256554 |
description | KeySet representing concepts of All, None, Some(list), and AllExceptSome(list), with basic set calculations (intersection, difference, inverse). |
homepage | |
repository | https://github.com/eturino/key-set.rs/ |
max_upload_size | |
id | 320356 |
size | 26,275 |
key_set
KeySet representing concepts of All, None, Some(list), and AllExceptSome(list), with basic set calculations (intersection, difference, inverse).
Other versions:
We have an enum with:
KeySet::All
represents the entirety of possible keys (π
)KeySet::None
represents an empty set (β
)KeySet::Some(vec)
represents a concrete set (A β π
)KeySet::AllExceptSome(vec)
represents the complementary set of a set, all the elements except the given ones (A' = {x β π | x β A}
) _(see Complement in Wikipedia)*We can have a KeySet of T
where T: Ord + Debug + Clone
KeySet implements cmp::Ord
, cmp::PartialOrd
, cmp::Eq
, cmp::PartialEq
, std::fmt::Debug
, and std::fmt::Display
KeySet::for_some(&list)
, KeySet::for_all_except_some(&list)
Build your KeySets using the factory functions, giving
KeySet::for_some(&list)
None
Some
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])
}
contains(&element)
Returns a boolean defining if the KeySet includes the given element.
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
}
invert()
All KeySet has an invert()
method that returns an instance of the opposite class, which represents the complementary KeySet. _(see Complement in Wikipedia)*
All
β· None
Some
β· AllExceptSome
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])
}
remove(&other)
Returns a new KeySet with the difference between 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])
}
intersect(&other)
Returns a new KeySet with the intersection of both Sets (A β© B)
, representing the elements present in both sets
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])
}
clone()
All KeySet has a clone()
method, which will return a new instance of the same class that represents the same KeySet.
If the KeySet is KeySetSome
or KeySetAllExceptSome
, they will have a vector with the same keys.
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
}