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

问题描述:

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

概念的例子)

一个使所有情况组合的类。 caseResultAsString的

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

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

值是 { “AA”, “AB”, “ AC”, “BA”, “BB”, “BC”, “CA”, “CB”, “CC”}

如果输入源和输出的结果是任何类型或者任何方式,没关系。

我想知道是否有具有上述概念特征的类。

+0

强大的API将开发人员变成懒惰的开发人员。 – Jack 2012-04-22 17:06:24

+0

所以,你要找的是一个**排列库**,是否正确? – 2012-04-22 17:08:00

+0

我认为这种组合经常被使用。不是吗? – 2012-04-22 17:11:43

这里是一个非常简单的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是每渗透对象的数量。如果需要,可以很容易地将其更改为NSArrays的NSSet,但是这当前仅使用一个字符串。

+0

我为你的努力鼓掌。 – 2012-04-22 17:26:47

+0

此代码不会生成集合的排列。 – alecail 2012-12-17 18:30:13