gpt4 book ai didi

ios - 使用对象属性从 NSArray 中过滤重复项

转载 作者:可可西里 更新时间:2023-11-01 17:07:19 24 4
gpt4 key购买 nike

我有一个包含 Order 对象列表的 NSArray,一个 Order 对象具有三个属性(id、typeID 和 description),我想根据 typeID 过滤我的数组以排除重复项。重复项由 typeID 确定,例如,如果有 2 个 typeID=7 的项目,那么我想选择具有最大 id 的订单,所以在这种情况下它将是 => id=2。

我的带有 Order 对象的 src 数组:

Item 1: id=1, typeID=7, description="some text 1"
Item 2: id=2, typeID=7, description="some text 2"
Item 3: id=3, typeID=5, description="some text 3"
Item 4: id=4, typeID=5, description="some text 4"
Item 5: id=5, typeID=8, description="some text 5"

应用过滤器后,我返回的数组应该如下所示:

Item 2: id=2, typeID=7, description="some text 2"
Item 4: id=4, typeID=5, description="some text 4"
Item 5: id=5, typeID=8, description="some text 5"

谁能建议最好的方法是什么,谢谢。

最佳答案

方法一:

- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate

我在想:

__block NSMutableSet *uniqueTypeIDs = [NSMutableSet set];
NSIndexSet *set = [myArrayOfObjects indexesOfObjectsPassingTest:^BOOL(id object, NSUInteger idx, BOOL *stop) {
if([uniqueTypeIDs containsObject:[NSNumber numberWithInt:object.typeID]]) {
return NO;
} else {
[uniqueTypeIDs addObject:[NSNumber numberWithInt:object.typeID]];
return YES;
}
}];

您的 typeID 是否需要转换为 NSNumber?你决定。返回的 NSIndexSet 将包含所有通过测试的对象的索引。然后您可以对这些对象进行操作,或将它们从数组中移除。

方法二:

或者使用 NSSet。如果您的对象确实是唯一的,则将数组转换为集合,然后再转换回数组 - 这是丢失重复对象的最简单方法。

NSSet *set = [NSSet setWithArray:array];

制作由独特对象组成的集合

[set allObjects];

为您提供集合中所有对象的数组

方法三:

另一种方法是使用类型 ID 作为键的 NSMutableDictionary;遍历数组,并使用 typeID(转换为 NSNumber)作为存储索引的键。如果您发现该键已存在于字典中,请不要再次添加它。结果是一个字典,其中包含原始数组中唯一对象的索引。

关于ios - 使用对象属性从 NSArray 中过滤重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com