2013-05-02 46 views
1

我有一個NSString它包含文件夾名和我有一個數組,看起來像這樣,有一個NSString

DATA (
    { 
    FolderName = Posteingang; 
    ID = 13000; 
}, 
    { 
    FolderName = Freigaben; 
    ID = 13001; 
}, 
    { 
    FolderName = "My Drive"; 
    ID = 13002; 
}, 
    { 
    FolderName = gsb; 
    ID = 13164; 
}, 
    { 
    FolderName = "my folder"; 
    ID = 13183; 
} 

我想數組數據與NSString的比較,所以我可以比較的數組ValueForKey從字符串中刪除不匹配的值。

for (NSString *FileName in ParsedData) 
    { 

     NSRange FileNameRange = [FileName rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

     if (FileNameRange.location == NSNotFound) { 

      [SearchData removeObject:[SearchData valueForKey:@"FolderName"]]; 

     } 
    } 

我有這個快速枚舉方法,我有Array SearchData。枚舉方法查找數組中的數據,如果未找到該數據,則應將其從數組中移除。SearchData數組將被顯示在tableview中。

我一直在嘗試上述方法,但它不起作用。

回答

3
NSString *searchText = @"Posteingang"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FolderName = %@",searchText]; 
NSMutableArray *predarr = [NSMutableArray arrayWithArray:[yourDATAArray filteredArrayUsingPredicate:predicate]]; 
if([predarr count]!=0) 
{ 
    NSLog(@"%@",predarr); 
} 
2

使用此:

NSString *matchString = @"Posteingang"; 
for (int i = 0; i > [dataArray count]; i++) // Here dataArray is your array 
{ 
    NSMutableDictionary *allDict = [dataArray objectAtIndex:i]; 
    if ([[allDict objectForKey:@"FolderName"] isEqualToString:matchString]) { 
     [dataArray removeObjectAtIndex:i]; 
    } 

} 

希望它可以幫助你。

1
NSString *stringToBeMatched = @"Freigaben"; 

for (NSDictionary *itemDic in array) 
{ 
    if ([[itemDic objectForKey:@"FolderName"] isEqualToString:stringToBeMatched]) 
    { 
     [dataArray removeObject:itemDic]; 
    } 
} 
2

嘗試

NSArray *folders = @[@{@"FolderName":@"Posteingang",@"ID":@13000}, 
        @{@"FolderName":@"Freigaben",@"ID":@13001}, 
        @{@"FolderName":@"My Drive",@"ID":@13002}, 
        @{@"FolderName":@"gsb",@"ID":@13164}, 
        @{@"FolderName":@"my folder",@"ID":@13183}]; 

NSString *searchText = @"gsB"; 
//Choose a predicate that you want 
//Case insensitive and diacritic search 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FolderName LIKE [cd] %@",searchText]; 
//Case sensitive search 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FolderName = %@",searchText]; 
//Any Matches 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FolderName CONTAINS [cd] %@",searchText]; 

NSArray *filteredArray = [folders filteredArrayUsingPredicate:predicate]; 

編輯:使用過濾快速列舉

for (NSDictionary *dict in [SearchData copy]){ 

    NSString *folderName = dict[@"FolderName"]; 
    if([searchText localizedCaseInsensitiveCompare:folderName]){ 

     [SearchData removeObject:dict]; 

    } 

} 
+0

檢查我編輯的代碼 – Vishal 2013-05-03 05:08:12

+0

@RANA您的枚舉錯誤。我假設'ParsedData'是一個字典對象的數組。 'SearchData'也是一個字典數組,但只有'ID'和'FolderName'。每個枚舉對象都是一個字典而不是字符串。 – Anupdas 2013-05-03 05:15:32

+0

這正是我想要的 – Vishal 2013-05-03 05:23:37

2

從所有的答案有點幫助後上述,我想通了,我自己的解決方案

for (NSDictionary *dict in [SearchData copy]){ 

     NSString *folderName = [dict objectForKey:@"FolderName"]; 

     NSRange range= [folderName rangeOfString:searchText options:NSCaseInsensitiveSearch]; 
     if(range.location == NSNotFound){ 
      [SearchData removeObject:dict]; 

     } 

    }  
+0

很高興知道您已找到解決方案。但我建議你不要使用這個,你可以用這兩行代碼,'NSPredicate * predicate = [NSPredicate predicateWithFormat:@「FolderName LIKE [cd]%@」,searchText]; [SearchData filterUsingPredicate:predicate];' – Anupdas 2013-05-03 07:51:24