SAMIR RATHOD
SAMIR RATHOD

Reputation: 3510

Local search in NSMutableArray

I want to search in NSMutableArray. My code is:

arrCelebs=[[NSMutableArray alloc] initWithObjects:@"Test 1",@"Test 2",@"Test 42",@"Test 5", nil];

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *arrString1 = txtSearch.text;
    NSRange tmprange;
    for (NSString *string in arrCelebs) {
        tmprange = [arrString1 rangeOfString:string];
        if (tmprange.location != NSNotFound) {
            NSLog(@"String found");
            break;
        }
    }
    return YES;
}

If I enter "t" then it searches all the data and I want to add it to another array for display in a tableview.

Upvotes: 0

Views: 260

Answers (6)

Rajneesh071
Rajneesh071

Reputation: 31081

This exact what you want...

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSMutableArray *resultAry = [[NSMutableArray alloc] init];
    for(NSString *string in arrCelebs)
    {
        NSRange range = [string rangeOfString:textField.text options:NSCaseInsensitiveSearch];

        if(range.location != NSNotFound)
        {
            [resultAry addObject:string];
        }
    }
    yourTableAry=[resultAry mutableCopy];
    [yourTable reloadData];
    return YES;
}

Upvotes: 0

Gigisommo
Gigisommo

Reputation: 1372

You can use the power of NSPredicate

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] %@", textField.text];
NSArray *filteredArray = [arrCelebs filteredArrayUsingPredicate:predicate];

Upvotes: 7

iPatel
iPatel

Reputation: 47059

IF YOU work With UITableView then you cal also put this type of Logic.

Take Two NSMutableArray and add one array to another array in ViewDidLoad method such like,

self.listOfTemArray = [[NSMutableArray alloc] init]; // array no - 1
self.ItemOfMainArray = [[NSMutableArray alloc] initWithObjects:@"YorArrayList", nil]; // array no - 2 

[self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray]; // add 2array to 1 array

And Write following delegate Method of UISearchBar

- (BOOL) textFieldDidChange:(UITextField *)textField
 {
        NSString *name = @"";
        NSString *firstLetter = @"";

    if (self.listOfTemArray.count > 0)
         [self.listOfTemArray removeAllObjects];

        if ([searchText length] > 0)
        {
                for (int i = 0; i < [self.ItemOfMainArray count] ; i = i+1)
                {
                        name = [self.ItemOfMainArray objectAtIndex:i];

                        if (name.length >= searchText.length)
                        {
                                firstLetter = [name substringWithRange:NSMakeRange(0, [searchText length])];
                                //NSLog(@"%@",firstLetter);

                                if( [firstLetter caseInsensitiveCompare:searchText] == NSOrderedSame )
                                {
                                    // strings are equal except for possibly case
                                    [self.listOfTemArray addObject: [self.ItemOfMainArray objectAtIndex:i]];
                                    NSLog(@"=========> %@",self.listOfTemArray);
                                }
                         }
                 }
         }
         else
         {
             [self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray ];
         }

        [self.tblView reloadData];
}

}

Output Show in your Consol.

Upvotes: 0

Balu
Balu

Reputation: 8460

By using predicate you Can easily get the result efficiently.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@",  txtSearch.text];
    NSArray *ResultArray = [yourArray filteredArrayUsingPredicate:predicate];
    return YES;
}

Upvotes: 3

Guo Luchuan
Guo Luchuan

Reputation: 4731

arrCelebs=[[NSMutableArray alloc] initWithObjects:@"Test 1",@"Test 2",@"Test 42",@"Test 5", nil];

_resultArray = [[NSMutableArray alloc] init];

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

NSString *arrString1 = txtSearch.text;
NSRange tmprange;
_resultArray = [[NSMutableArray alloc] init];
for(NSString *string in arrCelebs) {
        tmprange = [arrString1 rangeOfString:string];
        if (tmprange.location != NSNotFound) {
                 [_resultArray addObject:string];
        }
}
return YES;
}

Upvotes: 0

Rushi
Rushi

Reputation: 4500

Try :

arr_NewArray  = [[NSMutableArray alloc] init];

for (int i = 0; i < [arr_YourArrayToSearch count]; i++)
{
     NSString *curString = [string lowercaseString];
     NSString *curStringInArray = [[arr_YourArrayToSearch objectAtIndex:i]lowercaseString];

     if (![curString rangeOfString:curStringSmall].location == NSNotFound)
     {
          [arr_NewArray addObject:[arr_YourArrayToSearch objectAtIndex:i]];
     }
 }

arr_NewArray will give you the array with data matched to your search string.

Upvotes: 0

Related Questions