繁体   English   中英

如何比较一个char /一个char字符串-与一些字母集

[英]How compare a char / single char string - with some list of alphabets set

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

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]; 
    }

如果起始字母始终是英文字符(或任何可以用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];
}

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

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];

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

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM