【问题标题】:NSCaseInsentiveCompare works not as intended?NSCaseInsentiveCompare 不按预期工作?
【发布时间】:2012-07-02 19:00:04
【问题描述】:

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

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 等,它们不在单词数组中。

【问题讨论】:

    标签: objective-c string compare


    【解决方案1】:

    其实我已经找到了答案。 words 文件包含 names 文件中的所有名称。所以你只要得到所有的名字。所有三个代码变体都按预期工作。

    嗯,至少我今天学到了一些新东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 2015-06-26
      • 2013-05-28
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多