zoukankan      html  css  js  c++  java
  • 用 map 表达互斥逻辑

    在这个开发周期遇到这样一个需求:

    管理员可以给子账号配置权限,有些权限存在互斥不可同时勾选,比如

    审核员和代采、审核和采购员不可同时勾选

    之前同事实现的方式如下:

    这样每添加一个互斥关系就要遍历一次,低效且代码繁琐。

       // 审核员和代采、审核和采购员不可同时勾选
        if ([tag isEqualToString:@"审核"] && selected) {
            for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
                if ([dto.rolename isEqualToString:@"采购"] || [dto.rolename isEqualToString:@"代采"]) {
                    dto.isSelected = NO;
                }
            }
        }
        if ([tag isEqualToString:@"采购"]) {
            for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
                if ([dto.rolename isEqualToString:@"审核"] && selected) {  /// 审核和采购员不可同时勾选
                    dto.isSelected = NO;
                } else if ([dto.rolename isEqualToString:@"代采"] && !selected) { /// 取消采购默认取消代采
                    dto.isSelected = NO;
                    break;
                }
            }
        }
        /// 选择代采默认选择采购
        if ([tag isEqualToString:@"代采"] && selected) {
            for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
                if ([dto.rolename isEqualToString:@"采购"]) {
                    dto.isSelected = YES;
                } else if ([dto.rolename isEqualToString:@"审核"]) { /// 审核员和代采不可同时勾选
                    dto.isSelected = NO;
                }
            }
        }

    考虑到以后可能继续添加互斥关系,在此使用map保存互斥关系,

    这样每添加一种互斥关系只需要在map内增加对应的键值对就可以了,

    大大简化了逻辑,使代码更加清晰易于维护。

     1     // 审核员和代采、审核和采购员不可同时勾选
     2     // 使用 map 保存 互斥关系 ,k-v 表示 互斥
     3     NSDictionary *dict = @{
     4                            @"审核" : @"采购代采",
     5                            @"代采" : @"审核",
     6                            @"采购" : @"审核"
     7                            };
     8     
     9     NSString *mutex = [dict valueForKey:tag];
    10     
    11     if (!IsStrEmpty(mutex) && selected) {
    12         for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
    13             if ([mutex containsString:dto.rolename]) {
    14                 dto.isSelected = NO;
    15             }
    16         }
    17     }
  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/miaocunfa/p/9661540.html
Copyright © 2011-2022 走看看