不同nsArray对象的组合[英] Combinations of different NSArray objects

本文是小编为大家收集整理的关于不同nsArray对象的组合的处理方法,想解了不同nsArray对象的组合的问题怎么解决?不同nsArray对象的组合问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我想在Diffent arrays中找到elements的组合.假设我三个NSArray对象为:

NSArray *set1 = [NSArray arrayWithObjects:@"A",@"B",@"C", nil];
NSArray *set2 = [NSArray arrayWithObjects:@"a",@"b", nil];
NSArray *set3 = [NSArray arrayWithObjects:@"1",nil];

现在所需的答案遵循数组

NSArray *combinations = [{A},{B},{C},{a},{b},{1},{A,a},{A,b},{A,1},{B,a},{B,b},{B,1},{a,1},{b,1},{A,a,1},{A,b,1},{B,a,1},{B,b,1},{C,a,1},{C,b,1}];

编辑 目前,我已经执行了以下代码,并且能够获得两个长度的组合.

    NSArray *set1 = [NSArray arrayWithObjects:@"A",@"B",@"C", nil];
    NSArray *set2 = [NSArray arrayWithObjects:@"a",@"b", nil];
    NSArray *set3 = [NSArray arrayWithObjects:@"1",nil];

    NSArray *allSets = [NSArray arrayWithObjects:set1,set2,set3,nil];
    NSMutableArray *combinations = [NSMutableArray new];

    for (int index = 0; index < allSets.count; index++) {
        [combinations addObject:[NSMutableArray array]];
    }

    NSMutableArray *singleCombinations = combinations[0];

    for (NSArray *set in allSets) {
        [singleCombinations addObjectsFromArray:set];
    }

    for (int outerIndex = 0; outerIndex < allSets.count-1; outerIndex++) {

        NSArray *set = allSets[outerIndex];

        for (id object1 in set) {

            for (int innerIndex = outerIndex+1; innerIndex<allSets.count; innerIndex++) {
                NSArray *nextSet = allSets[innerIndex];

                for (id object2 in nextSet) {
                    NSString *combi = [NSString stringWithFormat:@"%@%@",object1,object2];
                    NSLog(@"%@",combi);
                }

            }

        }

    }

任何帮助???

推荐答案

使用以下功能,该功能附加 a2的所有元素到a1的每个元素:

的每个元素
NSArray *combinations(NSArray *a1, NSArray *a2)
{
    NSMutableArray *result = [NSMutableArray array];
    for (NSArray *elem1 in a1) {
        [result addObject:elem1];
        for (id elem2 in a2) {
            [result addObject:[elem1 arrayByAddingObject:elem2]];
        }
    }
    return result;
}

您可以从一个空数组开始,并 将其与您的套装结合在一起:

NSArray *set1 = @[@"A", @"B", @"C"];
NSArray *set2 = @[@"a", @"b"];
NSArray *set3 = @[@"1"];

NSArray *result = @[@[]];
result = combinations(result, set1);
result = combinations(result, set2);
result = combinations(result, set3);

显示结果:

for (NSArray *item in result) {
    NSLog(@"{ %@ }", [item componentsJoinedByString:@", "]);
}

输出

{  }
{ 1 }
{ a }
{ a, 1 }
{ b }
{ b, 1 }
{ A }
{ A, 1 }
{ A, a }
{ A, a, 1 }
{ A, b }
{ A, b, 1 }
{ B }
{ B, 1 }
{ B, a }
{ B, a, 1 }
{ B, b }
{ B, b, 1 }
{ C }
{ C, 1 }
{ C, a }
{ C, a, 1 }
{ C, b }
{ C, b, 1 }

其他推荐答案

如果您在应用程序中有一个数据库,则可以创建临时表,并在它们之间进行交叉连接,以获取所需的组合. 欢呼

本文地址:https://www.itbaoku.cn/post/924586.html