如何比较char / single char字符串 - 设置一些字母表列表

时间:2013-06-03 04:33:49

标签: ios objective-c nsstring

在我的应用程序中,我必须为不同的名称显示不同的颜色取决于起始字母

abcdeABCDE - gray color
:
:
pqrsPQRS - red Color
vuwxyzUVWXYZ - black color.

我已经实现了这样......

这给出了我想要的正确结果,但这不是最佳解决方案

有没有简单的解决方案呢

NSString *FirstLetter = [empName substringFromIndex:1];

if ( [FirstLetter isEqualToString:@"p"] || [FirstLetter isEqualToString:@"q"] || [FirstLetter isEqualToString:@"r"] || [FirstLetter isEqualToString:@"=s"] || [FirstLetter isEqualToString:@"P"] || [FirstLetterisEqualToString:@"Q"] || [FirstLetter isEqualToString:@"R"] || [FirstLetter isEqualToString:@"S"])
    {
        cell.textalbel.textColr =[UIColor redColor]; 
    }

3 个答案:

答案 0 :(得分:4)

如果起始字母始终是英文字符(或任何可以通过适合unsigned char的小整数表示),那么这是一个解决方案(我能想到的最快的一个 - 不使用跳转除外对于初始化的第一次检查,只使用普通的旧整数而不是NSString个实例的重量较重的比较:

- (UIColor *)colorFromName:(NSString *)name
{
    static UIColor *strs[1 << CHAR_BIT] = { nil };
    static BOOL initted = NO;

    if (!initted) {
        strs['a'] = [UIColor greyColor];
        strs['b'] = [UIColor whiteColor];
        // ...
        strs['z'] = [UIColor blueColor];

        initted = YES;
    }

    unsigned char first = tolower([name characterAtIndex:0]);
    return strs[first];
}

答案 1 :(得分:4)

有很多方法可以实现这一点,但最简单的可能就是:

static UIColor *colorForFirstLetterOfString(NSString *string) {
    unichar c = [[[string substringToIndex:1] lowercaseString] characterAtIndex:0];
    if (c >= 'a' && c <= 'e') return [UIColor grayColor];
    // ...
    else if (c >= 'p' && c <= 's') return [UIColor redColor];
    else if (c >= 'u' && c <= 'z') return [UIColor blackColor];
    else return nil;
}

如果您需要超出ASCII字符集,可以将数字常量用于Unicode代码点,如下所示:

// lower-case Greek letters
else if (c >= 0x03B1 && c <= 0x03C9) return [UIColor blueColor];

或者您可以在字符常量上使用L前缀,如下所示:

// lower-case Greek letters
else if (c >= L'α' && c <= L'ω') return [UIColor blueColor];

答案 2 :(得分:2)

您可以使用字典。类似于以下内容:

NSString *empName = @"Henry";
UIColor *color = nil;
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
                      [UIColor redColor], @"abcde",
                      [UIColor blueColor], @"fghij",
                      nil];
NSString *firstLetter = [empName substringWithRange:NSMakeRange(0, 1)];
for (NSString *key in dict.keyEnumerator) {
    if ([key rangeOfString:firstLetter options:NSCaseInsensitiveSearch].location != NSNotFound) {
        color = [dict objectForKey:key];
        break;
    }
}

NSLog(@"%@", color);