1

folderName を含む 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 と比較して、一致しない値を文字列から削除できるようにしたいと思います。

for (NSString *FileName in ParsedData)
    {

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

        if (FileNameRange.location == NSNotFound) {

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

        }
    }

この高速列挙メソッドがあり、Array SearchData があります。列挙メソッドは配列内のデータを検索し、そのデータが見つからない場合は配列から削除する必要があります。SearchData 配列はテーブルビューに表示されます。

上記の方法を試してみましたが、うまくいきません。

4

5 に答える 5

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];

EDIT:高速列挙を使用したフィルタリング

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

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

         [SearchData removeObject:dict];

    }

 }
于 2013-05-02T13:50:34.987 に答える
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];
    }

}

それがあなたを助けることを願っています。

于 2013-05-02T13:31:23.090 に答える
2
NSString *stringToBeMatched = @"Freigaben";

for (NSDictionary *itemDic in array)
{
     if ([[itemDic objectForKey:@"FolderName"] isEqualToString:stringToBeMatched])
     {
         [dataArray removeObject:itemDic];
     }
}
于 2013-05-02T13:36:38.737 に答える