gpt4 book ai didi

objective-c - 如何在没有一长串 if 语句的情况下将 float 映射到枚举

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:43 25 4
gpt4 key购买 nike

给定一个 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].scoreupperBound达到 1.0没有匹配项并处理错误。

关于objective-c - 如何在没有一长串 if 语句的情况下将 float 映射到枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8866985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com