key_demo/
key_demo.rs

1use ranges_ext::RangeSet;
2
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4    // 使用字符串作为 kind 的示例
5    let mut set: RangeSet<i32, &str> = RangeSet::new();
6
7    // 添加不同类型的区间(使用不同的 kind)
8    set.add(0..10, "type_a")?;
9    set.add(5..15, "type_b")?; // 与 type_a 重叠,但 kind 不同,会分割
10    set.add(20..30, "type_a")?;
11    set.add(25..35, "type_a")?; // 与上一个 type_a 重叠,会合并
12
13    println!("=== 带 kind 的区间集合 ===");
14    for info in set.iter() {
15        println!(
16            "Range: [{}, {}), Kind: {:?}",
17            info.range.start, info.range.end, info.kind
18        );
19    }
20
21    // 演示:只有 kind 相同的相邻区间才会合并
22    let mut set2: RangeSet<i32, i32> = RangeSet::new();
23    set2.add(0..10, 1)?;
24    set2.add(10..20, 1)?; // kind 相同且相邻,会合并
25    set2.add(20..30, 2)?; // kind 不同,不合并
26    set2.add(30..40, 2)?; // kind 相同且相邻,会合并
27
28    println!("\n=== 相邻区间合并示例 ===");
29    for info in set2.iter() {
30        println!(
31            "Range: [{}, {}), Kind: {}",
32            info.range.start, info.range.end, info.kind
33        );
34    }
35
36    Ok(())
37}