根据字符顺序将字符串搜索到NSArray中?

时间:2012-10-31 19:40:52

标签: iphone ios ipad nsstring nsmutablearray

我的问题场景是这样的。我有一个NSMutableArray(每个对象都是Nsstring)。我有一个用于搜索的UItextField(如客户所说)。

我想知道如何像这样搜索字符串到NSMutableArray

如果我在文本字段中键入A,那些内容来自从A开始的NSMutableArray。 如果我将AB键入TextField,那些内容来自从AB开始的NSMutableArray。 .... 我正在尝试NSRange概念我喜欢分享Mycode

  for (int i=0; i<[[localTotalArrayForAwailable objectForKey:@"PUNCH"] count]; i++)
{

    NSString *drinkNamePuch= [[[localTotalArrayForAwailable objectForKey:@"PUNCH"]  objectAtIndex:i] drinkNames];

    NSRange titleResultsRange = [drinkNamePuch rangeOfString:searchText options:( NSCaseInsensitiveSearch)];

    if (titleResultsRange.length>0)
    {
        [searchArraypuch addObject:[[localTotalArrayForAwailable objectForKey:@"PUNCH"]  objectAtIndex:i]];
        [copyListOfItems setValue:searchArraypuch forKey:@"PUNCH"];
    }
}

基于此代码搜索不能正常工作,因为我需要。

谢谢

4 个答案:

答案 0 :(得分:1)

如果您尝试从头开始查找与searchText匹配的所有字符串,那么您应该检查:

if ( titleresultsRange.location == 0 )

除此之外,我不确定什么是“不正常”,你需要更好地解释你的预期结果是什么,以及你的实际结果是什么。

答案 1 :(得分:1)

这样做;

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[cd] %@", searchText];
NSArray* filteredStrings = [[localTotalArrayForAwailable objectForKey:@"PUNCH"]  filteredArrayUsingPredicate:predicate];

在filteredStrings中,您获得了以searchText开头的所有字符串。

您可能会发现Predicate Programming Guide有帮助。

答案 2 :(得分:0)

您可以使用NSArray / NSMutableArray提供的这些方法:

  1. NSArray中,请参阅“在数组中查找对象”一节,了解以“indicesOfObjects ...”开头的过滤方法,例如: indexesOfObjectsPassingTest:

  2. NSArray中查看方法filteredArrayUsingPredicate:

  3. 的“推导新数组”部分
  4. NSMutableArray中,有一种方法filterUsingPredicate:

  5. 为了缩小结果范围,您可以继续将过滤连续应用于过滤后的数组或索引集。


    indexesOfObjectsPassingTest:使用block

    的示例
    NSArray *strings = [NSArray arrayWithObjects:@"A", @"a", @"aB", @"AbC", @"Bag", @"Babc", @"baCK", @"", @"dba", nil];
    NSString *searchString = @"Ab";
    
    BOOL (^startsWithPredicate)(id, NSUInteger, BOOL*) = ^BOOL (id obj, NSUInteger idx, BOOL *stop) {
        NSString *string = (NSString *) obj;
        NSRange range = [string rangeOfString:searchString options:NSCaseInsensitiveSearch];
        return (range.location == 0);
    };
    
    NSIndexSet *indexSet = [strings indexesOfObjectsPassingTest:startsWithPredicate];
    NSLog(@"Strings found: %@", [strings objectsAtIndexes:indexSet]);
    

    输出:

    Strings found: (
        aB,
        AbC
    )
    

答案 3 :(得分:0)

试试这个逻辑......它正在运作

 NSMutableArray *arr = [[NSMutableArray alloc]initWithObjects:@"aa",@"bbb",@"bb",@"cc",@"dd",@"ee",@"ff",@"gg",@"hh",@"ii", nil];
NSMutableArray *arrNew = [[NSMutableArray alloc]init];
NSString *strSearch = @"cccc";
int k = strSearch.length;
for (int i=0; i<[arr count]; i++) {
    for (int j=0; j<k; j++) {
        if (k<=[[arr objectAtIndex:i] length]) {
            if ([strSearch characterAtIndex:j] != [[arr objectAtIndex:i]characterAtIndex:j]) {
                break;
            }
            else if(j == k-1){
                [arrNew addObject:[arr objectAtIndex:i]];
            }
        }
    }
}
NSLog(@"%@",[arrNew description]);
相关问题