Ios 如何比较一组项目是否存在于另一组项目中
我有两个数组 首先,我比较两个Ios 如何比较一组项目是否存在于另一组项目中,ios,objective-c,arrays,cocoa,nsset,Ios,Objective C,Arrays,Cocoa,Nsset,我有两个数组 首先,我比较两个数组的计数,而不是将它们放入NSSet以检查它们是否包含关键字。如果bool返回true,那么我将它们添加到finalArray NSInteger int1 = inputArray.count; NSInteger int2 = databaseArray.count; if (int1 == int2) { NSArray *array = [inputArray filteredArrayUsingPredicate:[NSPredicate
数组的计数,而不是将它们放入NSSet
以检查它们是否包含关键字。如果bool
返回true,那么我将它们添加到finalArray
NSInteger int1 = inputArray.count;
NSInteger int2 = databaseArray.count;
if (int1 == int2) {
NSArray *array = [inputArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %@ contains[cd] self", databaseArray]];
NSSet *set1 = [NSSet inputArray];
NSSet *set2 = [NSSet setWithArray:array];
if([set1 isEqualtoSet:set2]) {
考虑以下情况:
inputArray = @"John", @"Kyle"
dataBaseArray[0] = @"third john Stewart", @"second kyle braflowski"
在本例中,我的代码会将该项添加到我的finalArray
,因为inputArray.count==dataBasesArray.count
(即2==2),集合2包含“john”和“kyle”
但事实证明,就我的目的而言,我的算法是错误的
考虑以下示例(用伪代码编写):
我需要我的算法将databaseArray
中的这两个项添加到finalArray
中,因为我在databaseArray[0]
和databaseArray[3]
中都有inputArray
中的所有键
在inputArray.count>databaseArray.count的情况下,如何获得正确的解决方案
一个新的例子
input array = (@"rice", @"chicken",@"tomato",@"egg")
假设我从数据库中得到了其中一个
(“100克大米”、“250克鸡肉”)
和另一个(“250克鸡肉”、“4个鸡蛋”、“3个番茄”)
用这个电流输入。我需要能够将数据库中的两个项目都添加到finalArray,以便在tableView上显示。您的问题不清楚,但我假设数据库数组中的每个元素都是NSString数组
下面的方法将databaseArray
中每个元素中的每一行分离为单独的字,并验证supplies列表中每一行中至少有一个字
- (NSArray *) intersectCandidates:(NSArray *)candidates withSupplies:(NSArray *)supplies
{
NSMutableArray *output=[[NSMutableArray alloc]init];
NSSet *suppliesSet=[NSSet setWithArray:supplies];
for (NSArray *candidateLines in candidates) {
int count=0;
for (NSString *candidateLine in candidateLines) {
NSArray *wordArray=[candidateLine componentsSeparatedByString:@" "];
for (NSString *word in wordArray) {
if ([suppliesSet contains:word]) {
++count;
break;
}
}
}
if (count == [candidateLines count]) { // We matched one word from each line
[output addObject:candidateLines];
}
}
return [NSArray arrayWithArray:output]; // Return a non-mutable copy
}
由于前面提到的XY问题,我不确定这是否是解决实际问题的最有效方法 你的问题我读了好几遍,我真的不知道你在问什么。根据标题,要“比较另一组项目中是否存在一组项目”,可以使用NSMutableSet:
NSMutableSet * set1 = ...;
NSMutableSet * set2 = ...;
[set1 intersectsWithSet:set2];
// set 1 now contains all the objects that the two sets have in common
NSLog(@"ObjectsInCommon: %@", set1);
首先将NSInteger*
更改为NSInteger
。这些不应该是指针。@rmaddy完成了。但这不是问题的根源:)@rmaddy你有什么想法或建议吗。我尝试了我所有的想法,这让我发疯。我真的不理解你的问题,格式让我很难阅读。如果您能澄清问题并修复格式,您可能会得到更多帮助。@rmaddy我试图澄清,但不确定我是否做到了。在您无法理解的地方,我可以帮助您吗?我认为这会起作用,但我有此错误[\u NSCFString CountByEnumerating WithState:objects:count:]:发送到实例0x1096cbe40的无法识别的选择器不知道为什么这意味着对字符串调用了方法,但该字符串不支持该方法。异常发生在哪一行?NSSet*suppliesSet=[NSSet setWithArray:supplies];hereSo提供的是一个字符串,而不是字符串数组。您应该传递一个字符串数组,其中每个字符串都是一个InCreditFor(NSString*candidateLine in candidateLines){现在这是我得到相同错误的地方。我硬记录了两个数组,以查看它是否能与字符串数组一起工作。
NSMutableSet * set1 = ...;
NSMutableSet * set2 = ...;
[set1 intersectsWithSet:set2];
// set 1 now contains all the objects that the two sets have in common
NSLog(@"ObjectsInCommon: %@", set1);