0

我正在尝试创建一个 iOS 应用程序,其中涉及一个主要的 if 语句来检查文本框是否包含某些文本。我想检查某个单词的多个实例,但我不想执行多个 if 语句,因为这会大大降低应用程序的性能。

如何检查单词是否与 NSArray 中的单词匹配,如果匹配,则在另一个文本框中返回与该单词关联的 NSString?

4

3 回答 3

4

您可以创建一个NSDictionary您正在检查的单词映射到NSString您想要在输入该单词时返回的单词:

NSDictionary *words = [[NSDictionary alloc] initWithObjectsAndKeys:
    @"word1", @"result1",
    @"word2", @"result2",
    /*etc*/
    nil];

NSString *wordFromTextBox = ...;
NSString *result = [words objectForKey:keyword];
if (result != nil)
{
    // use result
}
else
{
    // word wasn't something we expected
}

// Some time later
[words release];

编辑:要遍历列表以便您可以测试关键字是否包含在文本框中,您可以执行以下操作(假设wordswordFromTextBox像以前一样设置):

NSEnumerator *enumerator = [words keyEnumerator];
while ((NSString *keyword = [enumerator nextObject]) != nil)
{
    if ([wordFromTextBox rangeOfString:keyword].location != NSNotFound)
    {
        NSLog(@"The text box contains keyword '%@'", keyword);
        NSString *result = [words objectForKey:wordFromTextBox];
        // Use the result somehow
        break;
    }
}
于 2012-04-17T15:46:07.950 回答
1

我会使用 NSMutableDictionary/NSDictionary。字典键将是您要查找的单词。这些值将是您希望返回的单词。一旦你有了字典设置,只需调用[dict valueForKey:textbox.text]. 如果条目不在那里,dict 将返回 nil,因此您可以测试该条件。总而言之,我认为这可能是最快的方法。

于 2012-04-17T15:46:53.843 回答
1

对于数组,你可以从这段代码中得到一个想法:

NSArray* myArray = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
NSString* stringToSearch = @"four";
NSUInteger indexPositionInArray = [myArray indexOfObject:stringToSearch];
NSLog(@"position in array: %i", indexPositionInArray);
if (indexPositionInArray !=  NSNotFound) {
    NSLog(@"String found in array: %@", [myArray objectAtIndex:indexPositionInArray]);
}

NSString* stringToSearch2 = @"fourrrr";
NSUInteger indexPositionInArray2 = [myArray indexOfObject:stringToSearch2];
NSLog(@"position in array: %i", indexPositionInArray2);
if (indexPositionInArray2 !=  NSNotFound) {
    NSLog(@"String found in array: %@", [myArray objectAtIndex:indexPositionInArray]);
}
于 2012-04-17T15:50:00.920 回答