Skip to content

Instantly share code, notes, and snippets.

@Dev-Khaled
Last active September 25, 2017 11:37
Show Gist options
  • Save Dev-Khaled/c26612d587e61fbcbdfdfb3065b02ec2 to your computer and use it in GitHub Desktop.
Save Dev-Khaled/c26612d587e61fbcbdfdfb3065b02ec2 to your computer and use it in GitHub Desktop.
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSArray (FilterDuplicates)
- (NSMutableArray *)filterDuplicates:(NSString *)key;
- (NSMutableArray *)filterDuplicates:(NSString *)key sort:(BOOL)sort ascending:(BOOL)ascending;
@end
NS_ASSUME_NONNULL_END
#import "NSArray+FilterDuplicates.h"
@implementation NSArray (FilterDuplicates)
- (NSMutableArray *)filterDuplicates:(NSString *)key {
return [self filterDuplicates:key sort:false ascending:false];
}
- (NSMutableArray *)filterDuplicates:(NSString *)key sort:(BOOL)sort ascending:(BOOL)ascending {
NSArray *sortedDescArray;
if (sort) {
// First sort array
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:ascending];
sortedDescArray = [self sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
} else {
sortedDescArray = self;
}
NSMutableArray *myFilteredArrayOfObjects = [NSMutableArray array];
[sortedDescArray indexesOfObjectsPassingTest:^BOOL(id object, NSUInteger idx, BOOL *stop) {
if ([[myFilteredArrayOfObjects valueForKeyPath:key] containsObject:[object valueForKey:key]]) {
return NO;
} else {
[myFilteredArrayOfObjects addObject:object];
return YES;
}
}];
return myFilteredArrayOfObjects;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment