删除 NSArray 中的对象 (Objective-C)
Remove Object in NSArray (Objective-C)
我有一个包含我所有 json 的 NSArray (moodArray),我还有另一个包含 id 的 NSArray (idArray),如果 idArray id 存在于 moodArray 中,应该删除 moodArray 中的对象?怎么做 ?谢谢
我的代码:
- (void)fetchEntries
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:API_V3_CHANNEL_URL parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
NSDictionary *searchDict = responseObject;
// On filtre le json
NSPredicate *firstNamePredicate = [NSPredicate predicateWithFormat:@"status == %@", @"LIVE"];
NSPredicate *lastNamePredicate = [NSPredicate predicateWithFormat:@"status == %@", @"PAUSE"];
NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[firstNamePredicate, lastNamePredicate]];
// My idArray
NSArray *idArray = [[NSArray alloc] initWithObjects:@"56ead10ae3c9a053398b4580", @"56efq10ae3c9a053398b4590", nil];
// My moodArray (content alljson)
self.moodArray = [[searchDict objectForKey:@"CONTESTS"] filteredArrayUsingPredicate:compoundPredicate];
[self.collectionView reloadData];
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
我的心情数组 (json) :
我会检查 moodArray 是否包含与 idArray 相同的 ID,如果是,则删除 moodArray 中具有相同 ID 的对象
JSON 对象是字符串吗?如果是这样,我会使用 NSJSONSerialization 将它们转换成字典,然后提取 ID。
-(NSDictionary*) convertJSONStringToDictionary:(NSString*)jsonString
{
NSError *error;
NSData *objectData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:objectData
options:NSJSONReadingMutableContainers
error:&error];
return dictionary;
}
你可以用类似的东西清理数组:
-(NSArray*)removeIDs:(NSArray*)idArray fromArray:(NSArray*)moodArray
{
NSMutableArray *cleanedMoodArray = [NSMutableArray array];
for (NSString *jsonString in moodArray) {
NSDictionary *moodDictionary = [self convertJSONStringToDictionary:jsonString];
NSString *objectID = [moodDictionary objectForKey:@"id"];
if (nil != objectID) {
if (![idArray containsObject:objectID])
[cleanedMoodArray addObject:moodDictionary];
}
}
return cleanedMoodArray;
}
我有一个包含我所有 json 的 NSArray (moodArray),我还有另一个包含 id 的 NSArray (idArray),如果 idArray id 存在于 moodArray 中,应该删除 moodArray 中的对象?怎么做 ?谢谢
我的代码:
- (void)fetchEntries
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:API_V3_CHANNEL_URL parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
NSDictionary *searchDict = responseObject;
// On filtre le json
NSPredicate *firstNamePredicate = [NSPredicate predicateWithFormat:@"status == %@", @"LIVE"];
NSPredicate *lastNamePredicate = [NSPredicate predicateWithFormat:@"status == %@", @"PAUSE"];
NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[firstNamePredicate, lastNamePredicate]];
// My idArray
NSArray *idArray = [[NSArray alloc] initWithObjects:@"56ead10ae3c9a053398b4580", @"56efq10ae3c9a053398b4590", nil];
// My moodArray (content alljson)
self.moodArray = [[searchDict objectForKey:@"CONTESTS"] filteredArrayUsingPredicate:compoundPredicate];
[self.collectionView reloadData];
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
我的心情数组 (json) :
我会检查 moodArray 是否包含与 idArray 相同的 ID,如果是,则删除 moodArray 中具有相同 ID 的对象
JSON 对象是字符串吗?如果是这样,我会使用 NSJSONSerialization 将它们转换成字典,然后提取 ID。
-(NSDictionary*) convertJSONStringToDictionary:(NSString*)jsonString
{
NSError *error;
NSData *objectData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:objectData
options:NSJSONReadingMutableContainers
error:&error];
return dictionary;
}
你可以用类似的东西清理数组:
-(NSArray*)removeIDs:(NSArray*)idArray fromArray:(NSArray*)moodArray
{
NSMutableArray *cleanedMoodArray = [NSMutableArray array];
for (NSString *jsonString in moodArray) {
NSDictionary *moodDictionary = [self convertJSONStringToDictionary:jsonString];
NSString *objectID = [moodDictionary objectForKey:@"id"];
if (nil != objectID) {
if (![idArray containsObject:objectID])
[cleanedMoodArray addObject:moodDictionary];
}
}
return cleanedMoodArray;
}