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     }
  • 相关阅读:
    Corn Fields
    状压DP
    全排列函数
    搜索
    前缀和与差分
    最小花费
    【Lintcode】062.Search in Rotated Sorted Array
    【LeetCode】039. Combination Sum
    【LeetCode】040. Combination Sum II
    【LeetCode】047. Permutations II
  • 原文地址:https://www.cnblogs.com/miaocunfa/p/9661540.html
Copyright © 2011-2022 走看看