是否存在用于查找匹配任意范围的值的数据结构?

时间:2019-01-07 22:22:14

标签: data-structures language-agnostic

对于键相等性查找,我们可以使用像哈希图这样的数据类型,但是是否存在用于查找匹配任意范围的值的数据结构?

下面的Rust代码使用match表达式模拟了这一点,但我希望不必在代码中对案例进行硬编码。

let x = 5;

match x {
    d if d <= 0 => println!("d <= 0"),
    d if 1 < d && d <= 3 => println!("1 < d <= 3"),
    d if 4 < d && d <= 6 => println!("4 < d <= 6"),
    _ => {}
}

Rust playground

1 个答案:

答案 0 :(得分:1)

您可以创建一个范围列表,包括开始和结束值。按起始值对该列表进行排序。

查询时,对起始值进行二进制搜索。当您的值大于或等于起始值且小于或等于结束值时,您就知道您得到了正确的范围。

如果总范围相对较小(例如,从1到1000的整数),则可以预填充对范围的引用数组。假设您有4个范围,可能的查询值为0到10:

range1: 0, 2
range2: 3, 5
range3: 6, 8
range4: 7, 10

那么,您的数组将为[range1, range1, range1, range2, range2, range2, range3, range3, range3, range4, range4, range4, range4]

您可以将其扩展到所需的大小,具体取决于要花费的内存量。这样可以直接查找。