是否有一个类(功能,方法等或任何功能),如下面的功能?

时间:2012-04-22 17:02:57

标签: objective-c

是否有一个类(功能,方法等或任何功能),如下面的功能?

受孕的例子)

制作所有案例组合的类。

    NSString *sourceString = [[NSString alloc] initWithString:@"ABC"];
    NSArray *sourceArray = [[NSArray alloc] initWithObjects:@"A", @"B", @"C"];

    someClass *someClass1 = [[someClass alloc] init];

    NSString *caseResultAsString = [someClass1 makeAllCaseCombinationToStr:sourceString pair:2];
    NSArray *caseResultAsArray = [someClass1 makeAllCaseCombinationToArray:sourceArray pair:2];

caseResultAsString的值是 “AA AB AC BA BB BC CA CB CC”(对参数为2)

caseResultAsArray的值是 { “AA”,  “AB”,  “AC”,  “BA”,  “BB”,  “公元前”,  “CA”,  “CB”,  “CC”}

如果输入源和输出结果是任何类型或任何方式,则无关紧要。

我想知道是否有一个具有上述概念特征的课程。

1 个答案:

答案 0 :(得分:0)

这是一个非常简单的NSSet类别:

@interface NSSet(Permutations)

-(NSSet *) setWithPermuations:(int) n;

@end

@implementation NSSet(Permutations)

// data should be NULL the first time through
static void for_loop(int count, int levels, void (^block)(int *levels), int *data)
{
    int freeData = 0;
    if (!data)
    {
        data = malloc(sizeof(int) * levels);
        freeData = 1;
    }

    for (int i = 0; i < count; i++) {
        data[levels - 1] = i;

        if (levels)
            for_loop(count, levels - 1, block, data);
        else {
            if (block)
                block(data);
        }
    }

    if (freeData)
        free(data);
}

-(NSSet *) setWithPermuations:(int)n
{
    NSMutableArray *returnArray = [NSMutableArray array];
    NSArray *thisArray = [self allObjects];

    for_loop(thisArray.count, n, ^(int *levels) {
        NSMutableString *concat = [NSMutableString string];

        for (int i = 0; i < n; i++) {
            [concat appendFormat:@"%@", [thisArray objectAtIndex:levels[i]]];
        }

        [returnArray addObject:concat];

    }, NULL);

    return [NSSet setWithArray:returnArray];
}

@end

显然,算法的时间是O((N^T) + O(N)),其中N是集合中的元素,T是每次渗透的对象数量。如果你愿意,可以很容易地将其更改为具有NSA的NSArrays,但是这当前只使用了一个字符串。