文档章节

记录一次 不确定多层for循环的写法

w_sn
 w_sn
发布于 2016/10/14 14:25
字数 314
阅读 228
收藏 0

最近做一个商城类型的项目,用到了选择规格,类似淘宝发布那个样式,需要多种规格组合,并且是多组数据组合,一时也比较麻烦,用for循环吧,也不确定是多少层,也麻烦,最后想到了递归,于是就写出来了下面的一段代码,也解决了这个问题。

- (void)cyle {
    _resultsArray = [NSMutableArray array];
    _dataArray = @[@[@"1",@"2",@"3"],
                   @[@"4",@"5",@"6",@"*"],
                   @[@"7",@"8",@"9"]];
    [self cyle:0 dataArr:_dataArray[0]];
    NSLog(@"%@",_resultsArray);
}
/*
 * @param count 循环层数
 * @param arr 每次循环数据数组
 */
- (void)cyle:(NSInteger)count dataArr:(NSArray *)arr {
    if (count == 0) {
        [_resultsArray addObjectsFromArray:arr];
    } else {
        NSMutableArray * tempArray = [NSMutableArray array];
        for (NSInteger i = 0; i < _resultsArray.count; i++) {
            for (NSInteger j = 0; j < arr.count; j++) {
                [tempArray addObject:[NSString stringWithFormat:@"%@-%@",_resultsArray[i],arr[j]]];
            }
        }
        [_resultsArray removeAllObjects];
        _resultsArray = tempArray;
    }
    count++;
    if (count >= _dataArray.count) {
        return;
    }
    [self cyle:count dataArr:_dataArray[count]];
}

/*
输出结果:
    "1-4-7",
    "1-4-8",
    "1-4-9",
    "1-5-7",
    "1-5-8",
    "1-5-9",
    "1-6-7",
    "1-6-8",
    "1-6-9",
    "1-*-7",
    "1-*-8",
    "1-*-9",
    "2-4-7",
    "2-4-8",
    "2-4-9",
    "2-5-7",
    "2-5-8",
    "2-5-9",
    "2-6-7",
    "2-6-8",
    "2-6-9",
    "2-*-7",
    "2-*-8",
    "2-*-9",
    "3-4-7",
    "3-4-8",
    "3-4-9",
    "3-5-7",
    "3-5-8",
    "3-5-9",
    "3-6-7",
    "3-6-8",
    "3-6-9",
    "3-*-7",
    "3-*-8",
    "3-*-9"
*/

© 著作权归作者所有

w_sn

w_sn

粉丝 7
博文 21
码字总数 12750
作品 1
天津
iOS工程师
私信 提问
PHP基础巩固(一)

一、条件控制语句switch 基本语法为: 总结:switch语句相对于if...else语句来说,在某些情况下,书写更为清晰、简洁。 二、while、do...while循环语句 while和do...while类似,都是不确定循...

高能狂犬
2016/08/18
10
0
确保线程安全下使用Queue的Enqueue和Dequeue

场景是这样,假设有一台设备会触发类型为Alarm的告警信号,并把信号添加到一个Queue结构中,每隔一段时间这个Queue会被遍历检查,其中的每个Alarm都会调用一个相应的处理方法。问题在于,检查...

dotNET跨平台
2018/04/09
0
0
编程语言之问:何时该借用,何时该创造?

编程语言之问:何时该借用,何时该创造? 本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/OypPwnJ2vX2vJtZRkVa-Ug 6 月 22 日,Python 之...

豌豆花下猫
06/30
5.9K
6
如何在 JS 代码中消灭 for 循环

这篇文章基于我在公司内部分享会整理而成。欢迎探讨补充。 一,用好 filter,map,和其它 ES6 新增的高阶遍历函数 问题一: 将数组中的空值去除 答案: 问题二: 将数组中的 VIP 用户余额加 ...

leihuang
2018/07/27
0
0
Python Tricks 若干

赵斌 — APRIL 29, 2015在 python 代码中可以看到一些常见的 trick,在这里做一个简单的小结。 json 字符串格式化 在开发 web 应用的时候经常会用到 json 字符串,但是一段比较长的 json 字符...

OneAPM1
2015/05/08
60
1

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis 源码(二)Mybatis 初始化

Mybatis 初始化是由SqlSessionFactoryBuilder来完成的,主要的工作解析XML文件,并将解析的类容封装到Configuration类中,最后将Configuration类封装到SqlSessionFactory中并返回,自此初始化...

xiaolyuh
24分钟前
9
0
约瑟夫环问题

约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,...

mskk
33分钟前
5
0
JEP解读与尝鲜系列1 - Java Valhalla与Java Inline class

涉及到的JEP: Project Valhalla JEP 169: Value Objects JEP 218: Generics over Primitive Types 这些特性将在JDK14实现 Valhalla项目背景 最主要的一点就是,让Java适应现代硬件:在Java语...

zhxhash
35分钟前
10
0
总结:Redis集群

一、redis集群方案 Master-slave方式,Master和Slave的数据一致,Slave从Master同步数据,然后通过Sentinal(哨兵)监控Master和Slave的健康状态,当异常的时候迅速切换,如Master宕机的时候...

浮躁的码农
38分钟前
7
0
三个盘子的汉诺塔

package base;/** * 汉诺塔 */public class TowerApp { static int nDisks = 3; public static void main(String[] args) { doTowers(nDisks, 'A','B',......

clean123
40分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部