A data structure to store and manipulate ranges of integers with set operations.
Supported types: u8
, u16
, u32
, u64
, u128
, usize
, i8
, i16
, i32
, i64
, i128
and isize
.
Add the following line in your Cargo.toml
:
[dependencies]
irange = "1.1"
If you need serde
support you can include the following feature flag:
[dependencies]
irange = { version = "1.1", features = ["serde"] }
use irange::RangeSet;
let range1 = RangeSet::<i64>::new_from_ranges(&[AnyRange::from(3..=4), AnyRange::from(7..9)]);
let range2 = RangeSet::<i64>::new_from_range(-2..=4);
let union = range1.union(&range2);
println!("{union}"); // [ -2..=4 7..=8 ]
for value in union.iter() {
print!("{value} "); // -2 -1 0 1 2 3 4 7 8
}
println!();
let intersection = range1.intersection(&range2);
println!("{intersection}"); // [ 3..=4 ]
for value in intersection.iter() {
print!("{value} "); // 3 4
}
println!();
let difference = range1.difference(&range2);
println!("{difference}"); // [ 7..=8 ]
for value in difference.iter() {
print!("{value} "); // 7 8
}
println!();
Operation | Description | Time complexity | Space complexity |
---|---|---|---|
union |
Compute the union with the given RangeSet . |
O(n) |
O(n) |
intersection |
Compute the intersection with the given RangeSet . |
O(n) |
O(n) |
difference |
Compute the difference with the given RangeSet . |
O(n) |
O(n) |
complement |
Compute the complement. | O(n) |
O(n) |
has_intersection |
Return true if there is a common value with the given RangeSet . |
O(n) |
O(1) |
contains |
Return true if it contains the given value. |
O(n) |
O(1) |
contains_all |
Return true if it contains the given RangeSet . |
O(n) |
O(1) |
is_total |
Return true if it contains all the possible values. |
O(1) |
O(1) |
is_empty |
Return true if it does not contain any value. |
O(1) |
O(1) |