Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在目标c中生成组合的有效方法_Ios_Objective C - Fatal编程技术网

Ios 在目标c中生成组合的有效方法

Ios 在目标c中生成组合的有效方法,ios,objective-c,Ios,Objective C,我正在寻找一种从一组给定对象生成对象组合的方法顺序无关紧要(不是排列而是组合),例如。我有一个a、B、C、D的列表,我需要从中选择3个。。那么我应该得到一份 ABC ACD 卡介苗 在目标C中是否有这样做的有效逻辑 这里的关键在于技术。我在评论中提到的问题是有根据的。算法如下: 1) 从前n个元素开始 2) 增加最终元素,直到其位于最终位置 3) 将前一个元素向前移动一步,并将最后一个元素重置为前一个元素之后的位置 4) 重复步骤2和步骤3,直到上一个元素和最后一个元素位于最后两个位置 5) 将

我正在寻找一种从一组给定对象生成对象组合的方法顺序无关紧要(不是排列而是组合),例如。我有一个a、B、C、D的列表,我需要从中选择3个。。那么我应该得到一份

ABC ACD 卡介苗


在目标C中是否有这样做的有效逻辑

这里的关键在于技术。我在评论中提到的问题是有根据的。算法如下:

1) 从前n个元素开始
2) 增加最终元素,直到其位于最终位置
3) 将前一个元素向前移动一步,并将最后一个元素重置为前一个元素之后的位置
4) 重复步骤2和步骤3,直到上一个元素和最后一个元素位于最后两个位置
5) 将上一个元素向前移动1,并将末端的两个元素重置为上一个元素之后的位置
6) 重复此过程,直到所有元素都位于末尾

简化为:

当组合数组的第一个元素小于原始数组和组合数组之间的差值时,请执行以下操作:

当组合数组的最后一个元素小于原始数组的计数长度时,增加最后一个元素并从原始数组中获取结果索引

之后,检查上一个元素。如果小于lastElement-1,则将其递增,并将lastElement设置为前一个元素+1,然后重复上述步骤。如果不是,则检查上一个元素,依此类推。如果它们都是连续的,那么您就完成了

为了帮助实现这个算法,我建议创建一个与组合大小匹配的索引数组。假设您需要5元素数组的3元素组合。制作一个包含第一个索引的3元素数组:

[0,1,2]

首先应用上述算法,您将增加最后一个元素,直到结束[0,1,3][0,1,4]

然后,增加上一个并重置最后一个[0,2,3]

重复上述步骤,直到最后两个位于最终位置[0,2,4][0,3,4]

沿着直线向下移动[1,2,3][1,2,4][1,3,4][2,3,4],现在所有索引都位于最终位置,您就完成了

我不打算用Objective-C写出来,因为实现算法是每个程序员都需要的。我认为这将是你成功的充分信息。

是的,你有。 这不难,但很长。 只需使用for循环进行字符计数。 请看下面的代码

NSMutableArray *arr_Combinations = [[NSMutableArray alloc] init];


NSString *str_First;
NSString *str_Second;
NSString *str_Third;

for (NSInteger firCount = 0; firCount < 4; firCount++)
{
    NSMutableArray *arr_First = [NSMutableArray arrayWithObjects:@"A", @"B", @"C", @"D", nil];
    str_First = [arr_First objectAtIndex:firCount];

    [arr_First removeObjectAtIndex:firCount];

    for (NSInteger secCount = 0; secCount < [arr_First count]; secCount++)
    {
        NSMutableArray *arr_Second = [[NSMutableArray alloc] initWithArray:arr_First];
        str_Second = [str_First stringByAppendingString:[arr_Second objectAtIndex:secCount]];
        [arr_Second removeObjectAtIndex:secCount];
        for (NSInteger thirCount = 0; thirCount < [arr_Second count]; thirCount++)
        {
            NSMutableArray *arr_Third = [[NSMutableArray alloc] initWithArray:arr_Second];
            str_Third = [str_Second stringByAppendingString:[arr_Third objectAtIndex:thirCount]];
            [arr_Third removeObjectAtIndex:thirCount];
            for (NSInteger fothCount = 0; fothCount < [arr_Third count]; fothCount++)
            {
                NSString *str_Final = [str_Third stringByAppendingString:[arr_Third objectAtIndex:fothCount]];
                NSLog(@"%@", str_Final);
                [arr_Combinations addObject:str_Final];
            }
        }
    }
}
NSLog(@"%d", [arr_Combinations count]);
NSMutableArray*arr_组合=[[NSMutableArray alloc]init];
NSString*str_优先;
NSString*stru秒;
NSString*str_第三;
对于(NSInteger firCount=0;firCount<4;firCount++)
{
NSMUTABLEARRY*arr_First=[NSMUTABLEARRY数组,其对象为:@“A”、“B”、“C”、“D”、“nil];
str_First=[arr_First objectAtIndex:firCount];
[arr_First removeObjectAtIndex:firCount];
对于(NSInteger secCount=0;secCount<[arr_First count];secCount++)
{
NSMutableArray*arr_Second=[[NSMutableArray alloc]initWithArray:arr_First];
str_Second=[str_First stringByAppendingString:[arr_Second objectAtIndex:secCount]];
[arr_Second removeObjectAtIndex:secCount];
对于(NSInteger thirCount=0;thirCount<[arr_Second count];thirCount++)
{
NSMutableArray*arr_Third=[[NSMutableArray alloc]initWithArray:arr_Second];
str_Third=[str_Second stringByAppendingString:[arr_Third objectAtIndex:thirCount]];
[第三次删除对象索引:第三次计数];
对于(NSInteger fothCount=0;fothCount<[arr_第三次计数];fothCount++)
{
NSString*str_Final=[str_Third stringByAppendingString:[arr_Third objectAtIndex:fothCount]];
NSLog(@“%@”,str_最终版);
[arr_组合addObject:str_Final];
}
}
}
}
NSLog(@“%d”,[arr_组合计数]);

您在发布之前是否使用过搜索功能?(例如)看这个。。。是的,确实使用了搜索,但在目标C中未找到任何有效的解决方案。。对于iOS 5.1,因此它不能是处理密集型的。需要生成组合而不是排列。这些都不能回答我的问题question@inforeqd再看一次,我所列出的那个是组合。究竟什么才是“高效”呢?