gpt4 book ai didi

objective-c - 对于大型switch语句,是否有更优雅的解决方案?

转载 作者:行者123 更新时间:2023-12-01 17:44:36 24 4
gpt4 key购买 nike

我已经将很多范围映射到一个值,例如0-300 = 10,300-600 = 20,600-900 = 30 ... 2500000-2700000 = 7000...。因此,我可以做一个很大的开关-语句/ if-block,但我想知道是否有更优雅的方法来解决这个小问题。

好的,这是表的一小部分,包含真实数据:

0-300 : 25
301-600. : 45
601-900 : 65
901-1200. : 85
1201-1500: 105

1501-2000 : 133
2001-2500 : 161
2501-3000: 189
3001-3500:217
3501-4000:245

4001-4500:273
4501-5000:301
5001-6000:338

最佳答案

摆脱switch语句的最常见模式是使用字典。在您的情况下,由于您要映射范围,因此将使用范围截止的NSArray代替。如果您正在处理int,这就是它的样子:

NSArray *rangeCutoffs = [NSArray arrayWithObjects:[NSNumber numberWithInt:300],[NSNumberWithInt:600],...,nil];
NSArray *values = [NSArray arrayWithObjects:[NSNumber numberWithInt:10], [NSNumber numberWithInt:20],...,nil];

int mappedInt;
for (int index=0; index <= [rangeCutoffs count]; index++) {
if (intToMap < [[rangeCutoffs objectAtIndex:index] intValue]) {
mappedInt = [[values objectAtIndex:index] intValue];
}
}
if (mappedInt == 0) {
mappedInt = [[values lastObject] intValue];
}

实际上,您希望从plist加载 rangeCutoffsvalues而不是对其进行硬编码。

关于objective-c - 对于大型switch语句,是否有更优雅的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940150/

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