如果我想将这段代码放到一行怎么办?
if (count >= 0 && count <= 199) {
return 1;
} else if (count >= 200 && count <= 399) {
return 2;
} else if (count >= 400 && count <= 599) {
return 3;
} else if (count >= 600 && count <= 799) {
return 4;
} else {
return 5;
}
我只是想知道这几行代码是否有任何捷径。
答案 0 :(得分:6)
return ( count >= 0 && count <= 799 ) ? (1 + count / 200) : 5;
即:如果count在范围内,则返回每个范围200的连续值,如果超出范围,则返回5.
答案 1 :(得分:1)
如果无法直接从计数中计算范围,如Scott Hunter的答案所示(例如,如果范围大小不均匀或者它们映射的值不形成简单模式),则可以封装像这样的小桌面查找:
#include <algorithm>
#include <utility>
#include <vector>
int FindRange(int count) {
static const std::pair<int, int> ranges[] = {
{ 0, 5 },
{ 200, 1 },
{ 400, 2 },
{ 600, 3 },
{ 800, 4 }
};
const auto it = std::find_if(std::begin(ranges), std::end(ranges),
[=](const std::pair<const int, int> &range) {
return count < range.first;
});
return (it == std::end(ranges)) ? ranges[0].second : it->second;
}
然后您可以更改表值,只要您对它们进行排序,此功能将继续有效。
这是对表格的线性搜索,因此它应与级联if-else的性能相媲美。
答案 2 :(得分:0)
return 1 + std::min(count, 800) / 200;
应该可以。 if
隐藏在 std::min
中。如果 count
大于 800,则替换为 800,std::min(count, 800) / 200
等于 4。