NSCaseInsentiveCompare不按预期工作?

时间:2012-07-02 19:00:04

标签: objective-c string compare

我正在努力使这个代码工作,想法是比较两个字符串数组,首先是名字,第二个是单词,所以我尝试从第一个数组中找到单词,然后将它与第二个数组中的所有单词进行比较如果我得到肯定的结果,我会打印出来。但它不能按预期工作,它只打印所有名称数组。这段代码出了什么问题?也许有更有效的方法来做到这一点?

for (NSString *n in names) {

        for (NSString *m in words) {
            if ([n caseInsensitiveCompare:m] == NSOrderedSame) {
                NSLog(@"%@", n);
            }

        }          
    }

我尝试了另一种方式,它只是一个接一个地打印名字。尝试交换相同结果的名称的单词。相互比较有些不对劲。

  for (NSString *n in names) {
            NSString *newN = [n lowercaseString]; 

            for (NSString *m in words) {
                NSString *newM = [m lowercaseString];

                if ([newN isEqualToString: newM]) {
                    NSLog(@"%@ is equal to %@", newN, newM );
                }

            }          
        }

这件事提供了相同的结果!咄。

NSArray *names = [nameString componentsSeparatedByString:@"\n"];
NSArray *words = [itemsString componentsSeparatedByString:@"\n"];

int i = 0;
int j = 0;
while (i != [names count] ) {

    while (j != [words count]) {
        if ([[names objectAtIndex:i] caseInsensitiveCompare:[words objectAtIndex:j]] == NSOrderedSame)
        {
            NSLog(@"Voila! Name is : %@", [names objectAtIndex:i]);
        }
        j++;
    }
    j = 0;
    i++;

有什么问题?我想不通,我试过了。如果您从任一数组中逐个选择单词,您将获得正确的名称和单词。单词数组中没有大多数名称作为输出。我按顺序得到了名字,Aaron,Aasomething等,它们不是单词数组。

1 个答案:

答案 0 :(得分:0)

其实我找到了答案。单词文件包含名称文件中的所有名称。所以你得到所有的名字。所有三种代码变体都按预期工作。

好吧,至少我今天学到了新东西。