0%

数组去重添加元素Block方式实现

有时候我们需要该元素不在该数组中时才添加.

由于使用场景还算比较多,所以自己简单封装了一下.这里用block作为过滤条件,使用还是很方便的.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
@interface NSMutableArray (Tool)


/**
数组去重添加单个元素

@param anObject 被添加的元素
@param filterBlk 过滤条件.element为原数组的元素,anObject为被添加的元素.
*/
- (void)addObject:(id)anObject filter:(BOOL (^)(id element, id anObject))filterBlk;


/**
数组去重添加一个数组里的元素

@param otherArray 被添加的数组
@param filterBlk 过滤条件.element为原数组的元素,anObject为被添加的数组的元素.
*/
- (void)addObjectsFromArray:(NSArray *)otherArray filter:(BOOL (^)(id element, id anObject))filterBlk;

@end

@implementation NSMutableArray (Tool)

- (void)addObject:(id)anObject filter:(BOOL (^)(id, id))filterBlk
{
if (anObject == nil) {
return;
}

BOOL isExist = NO;
for (id obj in self) {
if (!filterBlk(obj, anObject)) {
isExist = YES;
break;
}
}

if (!isExist) {
[self addObject:anObject];
}
}

- (void)addObjectsFromArray:(NSArray *)otherArray filter:(BOOL (^)(id, id))filterBlk
{
if (otherArray.count == 0) {
return;
}

for (id element in otherArray) {
[self addObject:element filter:filterBlk];
}
}

@end

使用如下:

1
2
3
4
5
6
7
8
9
10
11
NSMutableArray *mArr = [@[@"3", @"4", @"5", @"33", @"7"] mutableCopy];
[mArr addObject:@"57" filter:^BOOL(NSString *element, NSString *anObject) {
return ![element isEqualToString:anObject]; //不等于其中任何一个元素才添加
}];
NSLog(@"%@", mArr);

NSArray *arr = @[@"1", @"2", @"3", @"13", @"7"];
[mArr addObjectsFromArray:arr filter:^BOOL(NSString *element, NSString *anObject) {
return ![element isEqualToString:anObject]; //不等于其中任何一个元素才添加
}];
NSLog(@"%@", mArr);

打印如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2018-09-28 20:52:39.060469+0800 testDemo[94995:18270135] (
3,
4,
5,
33,
7,
57
)
2018-09-28 20:52:39.060571+0800 testDemo[94995:18270135] (
3,
4,
5,
33,
7,
57,
1,
2,
13
)

也可以使用模型中的某个属性作为判断条件:

1
2
3
[audienceList addObjectsFromArray:self.audienceList filter:^BOOL(ZAEAudienceModel *element, ZAEAudienceModel *anObject) {
return ![element.userID isEqualToString:anObject.userID];
}];
觉得文章有帮助可以打赏一下哦!