【问题标题】:Comparing two Arrays using NSPredicate and returns the repeated character使用 NSPredicate 比较两个数组并返回重复的字符
【发布时间】:2013-12-20 13:22:14
【问题描述】:
NSArray *MainArray = [NSArray arrayWithObjects:@"A", @"U", @"U", @"U", nil]; // Array already stored 

NSArray *SubArray = [NSArray arrayWithObjects:@"A", @"U", nil]; // Array I passed during runtime

使用这两个数组,我需要从 MainArray 中获取U U

概念是我必须从 MainArray 中删除 A U,这是我在运行时传递的。

SampleOutput :
U U

【问题讨论】:

  • 'last 2' Us 有什么特别之处?如果您找到整个 SubArray 的匹配项,那么应该删除这些项目吗?
  • @Wain 我需要从主数组中删除确切的匹配项
  • 为什么要使用谓词?
  • 对象不一样。数组中的每个对象都是唯一的,因为您正在创建它们,因此您无法真正比​​较它们。在上面的示例中,您必须比较两个字符串以查看它们是否与 isEqualToString 相同。

标签: ios objective-c nsarray nspredicate


【解决方案1】:

您可以使用这种方法:

NSMutableArray *mainMutableArray = [NSMutableArray arrayWithArray:MainArray];
for (id instance in SubArray) {
    NSUInteger position = [mainMutableArray indexOfObject:instance];
    if (position != NSNotFound) {
        [mainMutableArray removeObjectAtIndex:position];
    } 
}
MainArray = [NSArray arrayWithArray:mainMutableArray];

【讨论】:

  • 如何使用谓词做到这一点?
  • 谢谢你,我明白了
【解决方案2】:
NSSet *set1 = [NSSet setWithArray:MainArray];
NSMutableSet *set2 = [NSMutableSet setWithArray:SubArray];
[set2 minusSet:set1];

试试这个代码..

【讨论】:

  • 这不会产生保留在集合/数组中的重复 U U 的预期结果
  • 你也可以使用这个 NSMutableArray *arrayOneCopy = [NSMutableArray arrayWithArray:MainArray]; [arrayOneCopy removeObjectsInArray:SubArray];
  • 伙计们,我需要从 MainArray 中删除确切的一个匹配项。并注意我应该谓词这样做,..有没有可能?
  • stackoverflow.com/questions/15743326/… 请参阅此链接,该链接将两个数组与谓词进行比较。
猜你喜欢
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 2011-11-14
  • 1970-01-01
相关资源
最近更新 更多