美文网首页iOS-递归
iOS使用递归处理数组数据

iOS使用递归处理数组数据

作者: 风外杏林香 | 来源:发表于2017-05-10 15:31 被阅读2150次

    递归使用背景,(彩票类app,需要遍历出所有的组合方式,比如竞彩足球,我选择两场比赛,每场比赛选择3种结果,过关方式为2串1)


    如图所选

    而这种选择方式总共有9注,分别用3、1、0来代表胜、平、负,则出现的结果为:33、31、30、13、11、10、03、01、00,将所选中的比赛加到数组里面,接下来,我要遍历出每种组合方式,需要得到如图所示的方案


    上图为我所需要的数据
    代码如下
        NSMutableArray *dataArray = [NSMutableArray arrayWithArray:[self.recordEveryGamesSelectedDetail allValues]];//此处数组是我从上个页面传过来的选择数据,
        self.needArray = [NSMutableArray array];//最终得到的组合数组(排列结果为33、31、30、13、11、10、03、01、00)
        NSMutableArray *result = [NSMutableArray array];
        [self combine:result data:dataArray curr:0 count:(int)dataArray.count];//调用递归函数,处理数据
    
    #pragma mark -- 使用递归排列组合出所有可能出现的方式
    - (void)combine:(NSMutableArray *)result data:(NSArray *)data curr:(int)currIndex count:(int)count
    {
        if (currIndex == count) {
            [self.needArray addObject:[result mutableCopy]];
            [result removeLastObject];
        } else {
            NSArray *array = [data objectAtIndex:currIndex];
            for (int i = 0; i < array.count; ++i) {
                [result addObject:[array objectAtIndex:i]];
                //进入递归循环
                [self combine:result data:data curr:currIndex+1 count:count];
                if ((i + 1 == array.count) && (currIndex - 1 >= 0)) {
                    [result removeObjectAtIndex:currIndex - 1];
                }
            }
        }
    }
    

    如下图、打印出来的组合方式即为我需要的组合方式

    由于我们提交服务器的时候胜平负为3、1、0,所以这里需要我们自己处理下数据,就可以得到如图二所需的

    以上就是使用递归,简单处理数据,然当数据量特别庞大时候,会很卡,所以,类似于这种数据处理,还是交给后台处理最好,加油!!!

    相关文章

      网友评论

      • 风外杏林香:4场比赛3串1属于组合投注,需要遍历出所有的组合方式,然后再递归,就可以
        名扬丶四海:你好,能不能给改一下代码,现在这一块比较晕,看一下你是怎么改的
      • 名扬丶四海:你好,看了下你的代码,如果是4场比赛3串1应该怎么写

      本文标题:iOS使用递归处理数组数据

      本文链接:https://www.haomeiwen.com/subject/srkgtxtx.html