如果您的范围是连续的,就像您给出的示例一样,那么请注意您不需要任何“间隔”。
像 1-9、10-19、20-29 这样的连续范围实际上定义了一个“阈值点”:9|10、19|20 等等。您可以简单地检查 1-9、10-19、20-29 范围,而不是检查:
if ( x <= 9 )
...
else if ( x <= 19 )
...
else if ( x <= 29 )
...
请注意,该else
部分向您保证每种情况下的下限。
编辑:
你已经用result = 10
等更新了你的代码。如果你真的只需要这样简单的操作,那么你可以定义一个列表:
var levelsAndValues = List<Tuple<int, int>>();
levelsAndValues.Add(Tuple.Create(5000000, 10));
levelsAndValues.Add(Tuple.Create(10000000, 20));
...
并在其上运行一个简单的循环:
int limit = 1000000;
int result = 0;
foreach(var level in levelsAndValues)
if(limit > level.Item1)
result = level.Item2;
else
break;
或 linq 查找:
var result = levelsAndValues.Where(level => limit > level.Item1)
.Select(level => level.Item2)
.LastOrDefault();
现在,如果您的范围不连续 - 您只需将第三个值引入元组:{low,high,value} 而不是像我上面写的那样仅 {high,value},然后相应地更新过滤。这可能也是将 Tuple 更改为自定义类型的好时机。
或者,要使用此处发布的 Interval 数据类型,就像 Martining 在评论中暗示的那样。