精华内容
下载资源
问答
  • 全面测试嵌套多层For循环的性能和优化方案.pdf
  • 多层for 循环优化方法

    2020-04-21 15:16:11
    多层for 循环优化方法 demo public List<AclModuleLevelDto> roleTree(int roleId) { // 1、当前用户已分配的权限点 List<SysAcl> userAclList = sysCoreService.getCurrentUserAclList(); // 2、...
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    public class Main {
     
        public static void main(String[] args) {
            List<Student> studentList = new ArrayList<>();
            Student student = new Student(1,"小明",1);
            Student student1= new Student(2,"小红",2);
            studentList.add(student);
            studentList.add(student1);
            List<Class> classList = new ArrayList<>();
           Class cl = new Class(1,"1班");
           Class c2 = new Class(2,"2班");
            classList.add(cl);
            classList.add(c2);
            // list 转成map,map存放的是key和value的映射关系
            Map<Integer,Class> map = new HashMap<>();
            for (Class aClass : classList) {
                map.put(aClass.getClassId(),aClass);
            }
    // Map<Integer, Class> map = classList.stream().collect(Collectors.toMap(Class::getClassId, e -> e));
            List<StudentAndClass> list = new ArrayList<>();
            if(studentList.size()>0){
                for (Student studentArray : studentList) {
                    Class c1= map.get(studentArray.getClassId());
                    if(c1!=null){
                        StudentAndClass studentAndClass = new StudentAndClass();
                        studentAndClass.setClassId(studentArray.getClassId());
                        studentAndClass.setClassName(c1.getClassName());
                        studentAndClass.setId(studentArray.getId());
                        studentAndClass.setName(studentArray.getName());
                        list.add(studentAndClass);
                    }
     
                }
            }
     
     
        }

     

    多层for 循环优化方法 demo
    public List<AclModuleLevelDto> roleTree(int roleId) {
        // 1、当前用户已分配的权限点
        List<SysAcl> userAclList = sysCoreService.getCurrentUserAclList();
        // 2、当前角色分配的权限点
        List<SysAcl> roleAclList = sysCoreService.getRoleAclList(roleId);
        // 3、当前系统所有权限点
        List<AclDto> aclDtoList = Lists.newArrayList();
    
        Set<Integer> userAclIdSet = userAclList.stream().map(sysAcl -> sysAcl.getId()).collect(Collectors.toSet());
        Set<Integer> roleAclIdSet = roleAclList.stream().map(sysAcl -> sysAcl.getId()).collect(Collectors.toSet());
    
        List<SysAcl> allAclList = sysAclMapper.getAll();
        for (SysAcl acl : allAclList) {
            AclDto dto = AclDto.adapt(acl);
           //  避免多才层for循环
            if (userAclIdSet.contains(acl.getId())) {
                dto.setHasAcl(true);
            }
            if (roleAclIdSet.contains(acl.getId())) {
                dto.setChecked(true);
            }
            aclDtoList.add(dto);
        }
        return aclListToTree(aclDtoList);
    }

    软件赚钱_优米谷

    展开全文
  • python多层for循环的跳出 用 for ... else ...语句,配合break 和 continue即可实现 例子: 下面是一个两层循环,当内层循环满足判定条件时,结束两层循环,如下所示: for i in range(3): for j in range(6): ...

    python多层for循环的跳出

    for ... else ...语句,配合breakcontinue即可实现

    例子:
    下面是一个两层循环,当内层循环满足判定条件时,结束两层循环,如下所示:

    for i in range(3):
        for j in range(6):
            print(i,j)
            if i == 1 and j > 3:
                break
        else:
            print("完整")
            continue
        print("出现了符合条件的")
        break
    print("结束循环")
    

    终端打印结果为

    0 0
    0 1
    0 2
    0 3
    0 4
    0 5
    完整
    1 0
    1 1
    1 2
    1 3
    1 4
    出现了符合条件的
    结束循环
    

    如果没有符合条件的,则会这样执行效果如下:

    for i in range(3):
        for j in range(6):
            print(i,j)
            if i == 5 and j > 3:
                break
        else:
            print("完整")
            continue
        print("出现了符合条件的")
        break
    print("结束循环")
    

    终端打印结果为

    0 0
    0 1
    0 2
    0 3
    0 4
    0 5
    完整
    1 0
    1 1
    1 2
    1 3
    1 4
    1 5
    完整
    2 0
    2 1
    2 2
    2 3
    2 4
    2 5
    完整
    结束循环
    
    展开全文
  • 自学OpenMP指南【多层for循环

    千次阅读 2020-05-01 13:24:23
    很多场景下,为了实现某一目标我们会使用多层for循环来解决问题,针对多层for循环如何使用openmp来进行加速,是

    很多场景下,为了实现某一目标我们会使用多层for循环来解决问题,针对多层for循环如何使用openmp来进行加速,是本篇博客所关注的问题。本篇博客将就着以下3点进行讨论

    从一个多层循环的例子说起

    先看这么一段代码:

    for(int i = 0; i < 2; i++) {
    	cout << "first loop"<< endl;
    	for (int j = 0; j < 2; j++) {
    		cout << "second loop" << endl;
    		for (int k = 0; k < 2; k++) {
    			printf("third loop i = %d j = %d k = %d \n");
    		}
    	}
    }
    

    以上为0-test.cc,后面会结合这个代码进行改动得到1-test.cc,2-test.cc.3-test.cc

    这个案例中一共有3层for循环,每一层都进行了打印操作,我们的目标是对这三层循环进行加速。

    首先我们应该清楚openmp能提升运行速度的原因主要时因为并行。不使用openmp,程序是串行的,一个操作接着一个操作进行。但实际上许多操作本身是不互相影响的,因此给提升性能带来了可能,我们可以让程序同一时刻进行多个互相不干扰的程序,进而提升效率。

    如果某个程序不同操作之间有影响,难道就不能并行了么?也不全是,并行的程序不能相互影响,因此想要提升相互影响的程序,首先可以先改代码使得不同操作之间没有影响,然后再并行。这个会在后期的其他博客中写,这里按住不提。

    就着上一个例子说明,单看最内层的打印操作,可以发现事实上对于最内层的打印来说,这个程序仅仅是重复打印了8次,这8次是互相不干扰的,因此是可以通过并行提升性能的。

    重点是我们如何用openmp进行并行。

    一些并行尝试

    为了更好的解释OpenMP在这里的作用我会用4个例子来具体介绍

    1-test.cc
    opm_set_num_threads(4)
    #pragma omp parallel
    for(int i = 0; i < 2; i++) {
     cout << "first loop"<< endl;
     for (int j = 0; j < 2; j++) {
      cout << "second loop" << endl;
      for (int k = 0; k < 2; k++) {
       printf("third loop i = %d j = %d k = %d \n");
      }
     }
    }
    

    很遗憾,这个代码并不会提升性能,在#pragma omp parallel的确会生成指定数目的线程个数,但是在1-test.cc的多个线程每个线程都完成了一遍整个程序,因此时间没有减少。

    2-test.cc
    opm_set_num_threads(4)
    #pragma omp parallel
    #pragma parallel for
    for(int i = 0; i < 2; i++) {
     cout << "first loop"<< endl;
     for (int j = 0; j < 2; j++) {
      cout << "second loop" << endl;
      for (int k = 0; k < 2; k++) {
       printf("third loop i = %d j = %d k = %d \n");
      }
     }
    }
    

    这个代码才真正做到了提升效率,并且时间可以减少为原来的一半。

    这究竟是什么原因呢?通过查询IBM官方
    给出的解释可以知道#pragma omp parallel会进行以下操作:

    • 生成指定数目的线程组
    • 每个线程完成语句生效范围内的所有操作
    • Working-sharing construct区域内的操作将由不同线程分别完成
      IBM官方给出的解释
      #pragam parallel for则完成了working-sharing construct区域建立的功能,因此必须在for循环前面加一个#pragma parallel for才能真正实现并行
    3-test.cc

    #pragma omp parallel for可以实现2-test.cc中的2行代码的功能

    opm_set_num_threads(4)
    #pragma omp parallel for
    for(int i = 0; i < 2; i++) {
     cout << "first loop"<< endl;
     for (int j = 0; j < 2; j++) {
      cout << "second loop" << endl;
      for (int k = 0; k < 2; k++) {
       printf("third loop i = %d j = %d k = %d \n");
      }
     }
    }
    

    结论

    对于多层for循环这种代码结构而言,如果最内层for循环各个分支之间互相不影响,则可以通过最外层for循环添加#pragma omp parallel for的方式实现并发。

    不过这个方法要特别注意是,多层for循环最内层分支不能互相有影响,而对于有影响的for循环,应该在并发之前改动代码结构,使得内层结构不互相影响,之后才可以进行代码并发化。

    并且,不是所有的多层for循环都是可以简单通过一行指令进行并行的,对于更复杂的代码结构,应该先理清代码逻辑,然后改写原代码成可以并行的代码结构,之后进行并行。

    展开全文
  • 本篇文章主要讲解C++中多层for循环的执行步骤,并且进行实例演示。 for循环简介 for循环在工作中使用很频繁也很重要,常常用于retry以及遍历,for循环的常见语法为: 1.retry: 通常在信号交互中使用比较常见,循环...

    本篇文章主要讲解C++中多层for循环的执行步骤,并且进行实例演示。

    for循环简介

    for循环在工作中使用很频繁也很重要,常常用于retry以及遍历,for循环的常见语法为:
    1.retry:
    通常在信号交互中使用比较常见,循环等待获取某个信号。

    for(int i=0;i<n;i++)
    {
    	//条件判断语句
    	if()
    	{
    		//满足判断跳出循环
    		break;
    	}
    }
    

    2.遍历
    在数组中遍历元素是for循环使用比较常见的方法之一

    for(int i=0;i<n;i++)
    {
    	//遍历数组
    }
    

    多层for循环执行步骤

    单个for循环比较简单,执行步骤很容易理解,那么多层for循环是如何执行的呢?
    先看双层for循环实例

    int main(){
    	int k,x;
    	for(k=0;k<3;k++)
    	{
    		for(x=0;x<3;x++)
    		{
    			cout<<"k="<<k<<endl;
    			cout<<"x="<<x<<endl;
    		}
    	}
    	return 0;
    }
    

    结果:
    在这里插入图片描述
    通过结果可知:
    先执行最外层循环,再执行内存循环
    详细一点就是:每执行外层循环一次,内层循环需要全部执行完

    从这个实例分析
    先执行外层循环k=0,此后执行内存循环x=0,且全部执行完到x=2。
    再执行外层循环k=1,此后执行内存循环x=0,且全部执行完到x=2。
    最后执行外层循环k=2,此后执行内存循环x=0,且全部执行完到x=2。

    那么,三层循环是否也是一样呢?

    int main(){
    	int k,x;
    	for(k=0;k<2;k++)
    	{
    		for(x=0;x<2;x++)
    		{
    			for(int i=0;i<2;i++)
    			{
    				cout<<"k="<<k<<endl;
    				cout<<"x="<<x<<endl;
    				cout<<"i="<<i<<endl;
    			}
    		}
    	}
    	return 0;
    }
    

    结果:
    在这里插入图片描述
    从结果发现:多层循环也是按照双层循环执行步骤先执行最外层循环再执行次层循环最后执行最内层循环
    并且最外层循环执行第一次,第二次循环执行第一次,最内层循环需要全部执行
    最外层循环执行不变,第二次循环执行第二次,最内层循环需要全部执行。

    直至次层循环和最内层循环全部执行完后,最外层会执行第二次。

    看完本篇文章是不是对于for循环理解更加透彻呢?

    在这里插入图片描述

    展开全文
  • 后来有了高级的for each 循环,然后这个跳出本次循环和跳出所有的for循环,都简单,稍微没见过的就是跳出多层for循环。 然后就是Java8出的foreach循环,这个循环里面,break和continue都不管用啦。 需要使用return...
  • js多层for循环嵌套,终止外循环

    千次阅读 2020-05-18 16:19:51
    在js中,多层for循环嵌套时,如果想在内层循环到达某个条件时,终止外层循环,可以这样做: a:for(let i=0;i<10;i++){ b:for(let j=0;j<10;j++){ console.log(i,j) if(i==5){ continue a; } if(i==6){ ...
  • java 跳出多层for 循环

    千次阅读 2017-09-05 13:18:09
    当然通过break 搭配逻辑运算也可以实现跳出多层for 循环,如方法2。其实想说的是其他的方法:a.通过标号;b.return; 下面一一列出以上方法。 [java] view plain copy 方法1:跳出单层循环...
  • java跳出多层for循环的两种方法

    千次阅读 2019-04-28 14:02:42
    java跳出多层for循环的两种方法 一 ok: for (int i = 0; i &amp;lt; 10; i++) { System.out.println(&quot;i= &quot; + i); for (int i1 = 0; i1 &amp;lt; 10; i1++) { System.out.println(&...
  • python3中多层for循环中的break、else语句 在多层for循环中,break语句只会停止自己本层的循环,不会停止外层循环, 若break语句未执行,则在本层for循环执行完成后,执行本层的else语句, 若break语句执行,则...
  • 全面测试嵌套多层For循环的性能和优化方案
  • mybatis批量插入数据,多层for循环,集合中含有集合 实体类 public class BathExifInfo { private List<ExifInfo> exifInfoList; } public class ExifInfo { private String batchId; private String ...
  • 用c语言 1.利用二维数组和多层for循环实现九九乘法表并显示出来 2.用数组,键盘输入8个同学成绩,求平均数并显示出来。
  • 多层for循环优化

    千次阅读 2019-05-12 13:33:51
    1.6.1 找出最大周长的三角形 /*可以用穷举找出最长,三重循环。*/ for (i = 0; i ;++i) { for (j = i + 1; j ; ++j) { for (k = j + 1; k ; ++k) { len = b[i] + b[j] + b[k]; m
  • 穷举法破解密码(递归 + 多层for循环)

    千次阅读 2019-06-28 12:45:30
    题目要求: 1. 生成一个长度是3的随机字符串...要求: 分别使用多层for循环 和 递归解决上述问题 1)首先用递归来实现 public static void guessNum(char[] c, int index, String password){ boolean flag = fa...
  • java 跳出单层for循环和多层for循环

    千次阅读 2016-08-03 10:06:32
    public static void main(String[] args) { /** * 跳出单层for循环 */ /*for(int i=0;i;i++){ System.out.println("i="+i); if(i==2){ brea
  • 学习算法的时间复杂度的渐进表示时所遇到的一个例子:计算多层for循环嵌套时的语句频度。语句频度即执行最多的语句(基本语句)重复执行的次数。 for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for(int k...
  • 采用标签方式跳出,指定跳出位置, a:for(int i=0;i&lt;n;i++) { b:for(int j=0;j&lt;n;j++) { if(n=0) { break a; } } }
  • Java提供了标签功能,在执行跳转语句,如break/continue时,... for (int i = 0; i < 100; i++) breakPoint2: for (int j = 0; j < 100; j++) breakPoint3: for (int k = 0; k < 100; k++) { //没
  • public static void main(String[] args){ tag2: for(int i=0;i<5;i++){ tag1: for(int k=0;k<5;k++){ System.out.println(k); if(k==1){ break tag2;
  • Python 小技巧,如何跳出多层for循环

    千次阅读 2019-01-22 14:40:27
    背景: ...使用 label 语句可以方便跳出 for多层循环;然后想到 Python 要如何实现 for 循环多层跳出呢?以前一直没有考虑这个问题。   巧用 for ... else ... 解决(也是参考了https://bl...
  • 多层for循环嵌套使用sql优化

    千次阅读 2020-05-16 16:54:28
    哇,已经有一年多没有写了 这来来记录一下一个小小的优化 ... 可以看出来之前代码套了3层for循环,按照每天去循环查每种票类型对应每一个省份的逻辑,从order(订单表)中依次统计对应create_time...
  • 相对于直接双层for循环,速度起飞 Map<String,Map<String,String>> map2= resultList.stream().collect( Collectors.toMap(s->getKeyStr(s),s->s)); dataList.forEach(c->{ if(map2.ge...
  • python 多层for循环嵌套的优化方法

    千次阅读 2020-03-11 14:20:40
    题目:有5个长度不一的数组a1、a2、a3、a4、a5,现各从数组中取出一个数,组成...题目挺简单,看一下就明白,然后第一时间用了一堆for循环,脚本如下: a1 = [1,2,4] a2 = [2,3,4,5] a3 = [1,4,7] a4 = [3,6,7,8] a5...
  • break 跳出两层甚至多层 for 循环

    千次阅读 2020-03-16 19:19:21
    这个小技巧我用了很久了,我以为普普通通应该大家都这么用吧,知道前段时间我看到还有人写这样的教程,...for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { // 这里执行相应的程序任务 if (i == 4 &a...
  • 任务功能: 打印用1、2、3、4四个数字可生成的无重复数字的三位数 ...多层for循环使用 代码实现: n = 0 for i in range(1,5): for j in range(1,5): for k in range(1,5): if (i != j and i != k and...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,647
精华内容 14,258
关键字:

多层for循环