如何比较另一组项目中是否存在一组项目

时间:2014-05-10 23:10:53

标签: ios objective-c arrays cocoa nsset

我有两个阵列。

首先,我将两个arrays的计数进行比较,而不是将它们放在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"和"凯尔。"

但事实证明我的算法对我来说是错误的。

考虑以下示例(用伪代码编写):

inputArray = @"John" , @"Kyle", @"George", @"Mary"
dataBaseArray[0] =  @"third john Stewart", @"second kyle braflowski"
databaseArray[3] = @"First Mary Steps", @"fourth kyle lomorik",@"second George steps"

我需要我的算法将这两个项目从databaseArray添加到finalArray,因为我inputArray中的所有键都来自databaseArray[0](约翰,凯尔) )和databaseArray[3](乔治,凯尔,玛丽)。

在inputArray.count>的情况下,如何获得正确的解决方案? databaseArray.count?

一个新例子

input array = (@"rice", @"chicken",@"tomato",@"egg")

并且假设我从我的数据库中得到了2个项目 (@"100 gr rice",@"250 gr chicken")和其他(@"250 gr chicken",@"4 eggs",@"3 tomato@")

使用此电流输入。我需要能够将我的数据库中的两个项目添加到finalArray中,以便在tableView上显示它。

2 个答案:

答案 0 :(得分:0)

您的问题不明确,但我假设databaseArray中的每个元素都是NSStrings数组。

以下方法将databaseArray中每个元素中的每一行拉成单独的单词,并验证耗材列表中每行至少有一个单词。

- (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问题,我不确定这是解决实际问题的最有效方法。

答案 1 :(得分:0)

我几次读了你的问题,老实说,我不知道你在问什么。根据标题,您想要比较另一组项目中是否存在一组项目"您可以使用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);