在我的应用程序中,我有一个不同的评分级别
例如
70-80 Good
81-95 Excellent
60 Average
然后我得到一个测试结果值,比如77或88。
注意:我将70-80等数据库中的范围保存为文本。
如何从评分级别比较这些值以获得合适的答案?
您需要从数据库或核心数据或文本文件读取字符串。
让您将字符串读取为:
NSString *gradeRange=@"70-80";
NSArray *breakRange=[gradeRange componentsSeparatedByString:@"-"];
NSInteger score=77;
if( (score > [breakRange[0] integerValue]) && (score < [breakRange[0] integerValue]) ){
NSLog(@"%ld lies in %@.", score, gradeRange);
//Here you can log, display as per your need
}
//else if // similarly for all ranges
我会这样做:
NSString* str_good = @"70-80"; //From the database
NSRange good_range = NSRangeFromString(str_good);
good_range.length = good_range.length-good_range.location; //Ranges are (location, length) we convert it to that format
NSString* str_excellent = @"81-95"; //From the database
NSRange excellent_range = NSRangeFromString(str_excellent);
excellent_range.length = excellent_range.length-excellent_range.location; //Ranges are (location, length) we convert it to that format
int grading = 77;
if(NSLocationInRange(grading, good_range)) {
NSLog(@"good");
}
if(NSLocationInRange(grading, excellent_range)) {
NSLog(@"excellent");
}
您不应该将范围作为文本存储在数据库中。这样,你每次阅读时都必须对其进行解析,并将其划分为该年级的上限和下限。
相反,将级别存储在这样的表中:
Name | minimumScore | maximumScore
Excellent | 81 | 95
Good | 70 | 80
这样,您就可以通过使用类似actual >= minimumScore AND actual <= maximumScore
的WHERE
子句来轻松查询级别的名称。
如果我理解你的问题,你可以这样做:
if (result >= 81 && result <= 95) {
//Excellent
}
根据你的成绩创建一个自定义方法,比如
-(NSString*)getGradeWithMin:(int)minValue max:(int)maxValue
{
return (minValue>80 && maxValue<=100) ? @"A" : ((minValue>60 && maxValue<=80) ? @"B" : ((minValue>40 && maxValue<=60) ? @"C" : @"D"));
}
在此之后,使用componentsSeparatedByString
来分离最大和最小范围。
NSArray *boundary = [@"70-80" componentsSeparatedByString:@"-"];
NSLog(@"Grade is : %@",[self getGradeWithMin:[[boundary objectAtIndex:0] intValue] max:[[boundary objectAtIndex:1] intValue]]);
希望这能给你一个想法。