作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
给定一个 float ,如何将它映射到一个像这样的枚举
{FAIL, POOR, OK, GOOD, EXCELLENT, PERFECT}
如果分区不均匀。
0.0-0.4 is FAIL
0.4-0.6 is POOR
...
0.8-0.999.. is EXCELLENT
1.0 is PERFECT
float 是根据游戏中所有玩过的关卡计算得出的评级值。它的范围从 0..1,包括两者。通常需要不超过 10 个分区,但间距会在开发过程中进行调整。
我目前正在使用一堆 if..else 语句。这是正确的方法吗?看起来有点脆。
最佳答案
使用结构数组 - 静态分配或动态 - 然后使用一个简单的例程来搜索它 - 如果它很小就迭代,如果它很大你可以进行二进制搜索。
正如您所知的最小值 (0.0) 和最大值 (1.0),您只需要存储范围的上限和枚举值。例如:
typedef enum {FAIL, POOR, OK, GOOD, EXCELLENT, PERFECT} Rating;
typedef struct
{
float upperBound;
Rating score;
} RatingDivision;
static RatingDivision Divisions[] =
{
{ 0.4, FAIL },
{ 0.6, POOR },
...
{ 0.999, EXCELLENT },
{ 1.0, PERFECT }
};
现在sizeof(Divisions)/sizeof(RatingDivision)
将告诉您条目数(二进制搜索所需),或者只是迭代直到您要查找的值是 <= Divisions[i].upperBound
返回 Divisions[i].score
或 upperBound
达到 1.0
没有匹配项并处理错误。
关于objective-c - 如何在没有一长串 if 语句的情况下将 float 映射到枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8866985/
我是一名优秀的程序员,十分优秀!