Go巧用Map减少For循环

背景交代:
需要在一个学院、专业、班级的树中,在专业与班级节点插入年级节点,达到更好区分的目的。

原来格式:
|---Academy
|    |---Major
|         |---Class
目标格式:
|---Academy
|    |---Major
|         |---Grade
|              |---Class

本想利用Class中含有的Grade属性替换原有的父节点Major,再将Grade作为节点,其父节点置为原有的父节点Major。

子节点 父节点
old 15级1班 法学
new 15级1班 2015
2015 法学

由于Grade属性依附在在Class,生成的结构不符合要求!

Paste_Image.png

应该是:
Paste_Image.png
所以要把已经生成的年级节点记录一下,再有相同的专业下的年级节点,便不再生成了。

代码如下,利用一个Map存储已经生成的年级节点,如果已经生成年级节点,直接将该班级节点的父节点置为已经生成的年级节点。

func (abp *APIBasicParameterHandle) addGradeData(classData []map[string]string) []map[string]string {
    // 存放年级节点
    var gradeData []map[string]string
    // 用于记录是否已生成年级节点
    tmpMap := make(map[string]string)
    count := 1
    for _, vo := range classData {

        gradeName := vo["GradeName"]
        majorName := vo["ParentDepartName"]
        if t, ok := tmpMap[gradeName+majorName]; ok {
            vo["ParentDepartCode"] = t
            vo["ParentDepartName"] = gradeName
            continue
        }
        gradeCode := utility.NewUuid()
        gradeOrganization := make(map[string]string)
        gradeOrganization["DepartmentCode"] = gradeCode
        gradeOrganization["DepartmentName"] = gradeName
        gradeOrganization["Level"] = "5"
        gradeOrganization["ParentDepartCode"] = vo["ParentDepartCode"]
        gradeOrganization["ParentDepartName"] = vo["ParentDepartName"]
        gradeOrganization["Squence"] = strconv.Itoa(count)
        gradeData = append(gradeData, gradeOrganization)

        tmpMap[gradeName+majorName] = gradeCode
        vo["ParentDepartCode"] = gradeCode
        vo["ParentDepartName"] = gradeName
        delete(vo, "GradeName")
        count++
    }
    classData = append(classData, gradeData...)
    return classData
}

之前判断是否已经生成年级节点的方式是:循环classData判断class的父节点是否还是原先的节点。这样会多出两个for循环,循环中有很多重复判断数据。临时建立TmpMap,以"GradeName"+"MajorName"为Key,每次进入循环,判断该Key是否存在。如果存在,则该节点已经生成,直接将TmpMap中Key对应的Value更新为Class的父节点;如果不存在,则生成该年级节点,将该节点暂存,增加TmpMap对应关系,将Class的父节点更新。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,814评论 0 9
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,292评论 0 16
  • 棠梨树 第一束含苞吐露 待你从稚嫩走向成熟 就会领悟,我 披荆斩棘的征途 学子路 黎明惺忪的日初 待你从温柔变成炙...
    小草鞋阅读 230评论 0 0
  • 如果你特别特别想要一个东西的话,得到的可能恰好是另一个东西。但人生最有意思的是,很多时候,你后来得到的那个其实远比...
    嘿喵喵阅读 202评论 0 0