ios – 使用object属性从NSArray中过滤复制

ios – 使用object属性从NSArray中过滤复制,第1张

概述我有一个包含Order对象列表的NSArray,一个Order对象有三个属性(id,typeID和description),我想根据typeID过滤我的数组以排除重复项.重复项由typeID确定,例如,如果有2个类型为ID = 7的项目,那么我想选择具有最大ID的订单,因此在这种情况下它将是=> ID = 2. 我的带有Order对象的src数组: Item 1: id=1, typeID=7, 我有一个包含Order对象列表的NSArray,一个Order对象有三个属性(ID,typeID和description),我想根据typeID过滤我的数组以排除重复项.重复项由typeID确定,例如,如果有2个类型为ID = 7的项目,那么我想选择具有最大ID的订单,因此在这种情况下它将是=> ID = 2.

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

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

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

Item 2: ID=2,description="some text 2"Item 4: ID=4,description="some text 5"

有人可以建议这样做的最佳方式,谢谢.

解决方法 方法一:

– (NSIndexSet *)indexesOfObjectsPassingTest:(BOol(^)(ID obj,NSUInteger IDx,BOol * stop))谓词

我想的是:

__block NSMutableSet *uniqueTypeIDs = [NSMutableSet set];NSIndexSet *set = [myArrayOfObjects indexesOfObjectsPassingTest:^BOol(ID object,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 – 使用object属性从NSArray中过滤复制全部内容,希望文章能够帮你解决ios – 使用object属性从NSArray中过滤复制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1010515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存