对于键相等性查找,我们可以使用像哈希图这样的数据类型,但是是否存在用于查找匹配任意范围的值的数据结构?
下面的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"),
_ => {}
}
答案 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]
。
您可以将其扩展到所需的大小,具体取决于要花费的内存量。这样可以直接查找。