Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何比较一组项目是否存在于另一组项目中_Ios_Objective C_Arrays_Cocoa_Nsset - Fatal编程技术网

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);