是否有类(功能,方法等或任何功能)像下面的功能?
是否有像下面的功能类(功能,方法等或任何功能)?是否有类(功能,方法等或任何功能)像下面的功能?
概念的例子)
一个使所有情况组合的类。 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”}
如果输入源和输出的结果是任何类型或者任何方式,没关系。
我想知道是否有具有上述概念特征的类。
这里是一个非常简单的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,但是这当前仅使用一个字符串。
我为你的努力鼓掌。 – 2012-04-22 17:26:47
此代码不会生成集合的排列。 – alecail 2012-12-17 18:30:13
强大的API将开发人员变成懒惰的开发人员。 – Jack 2012-04-22 17:06:24
所以,你要找的是一个**排列库**,是否正确? – 2012-04-22 17:08:00
我认为这种组合经常被使用。不是吗? – 2012-04-22 17:11:43