zoukankan      html  css  js  c++  java
  • 元素与集合的问题思考

    今天同事遇到一个元素和集合的问题,引发了我的思考。情景如下

    一个元素和集合,如果元素在集合内,则移除该集合内的这个元素,否则添加该元素进入这个集合。

    他给出代码如下:

    <?php
    $value=5;
    $list=array(1,2,3,4,5,6,7,8,9,10);
    if(empty($list) || !in_array($value,$list) )
    {
        $list[] = $value;
    }else
    {
        foreach($list as $k => $v)
        {
            if($v == $value)
            {
                unset($list[$k]);
            }
        }
    }
    ?>

    这个模式比较基础化,也很容易理解,不过针对这个foreach,我们都有一点顾及,于是修改了一下

    <?php
    $value=5;
    $list=array(1,2,3,4,5,6,7,8,9,10);
    if(empty($list) || !in_array($value,$list) )
    {
        $list[] = $value;
    }else
    {
        $search_key=array_search($value,$list);
        unset($list[$search_key]);
    }
    ?>

    这个改进去掉了foreach的循环,实际上,是使用 array_search代替了foreach。

    小小的问题突然引发了我的思考,这个array_search  in_array  empty好像有点重复了,于是我想到另一种写法

    <?php
    $value=5;
    $list=array(1,2,3,4,5,6,7,8,9,10);
    $search_key=array_search($value,$list);
    if($search_key!==false)
    {
        unset($list[$search_key]);
    }else
    {
        $list[] = $value;
    }
    ?>

    之前在做编辑更新绑定关系的时候,我记得我也处理过类似问题,是一种集合差集的概念,于是我想到这样写

    <?php
    $value=5;
    $list=array(1,2,3,4,5,6,7,8,9,10);
    if(in_array($value,$list))
    {
        $value=(array)$value;//单个元素转数组
        $list=array_diff($list,$value);//数组求差集
    }else
    {
        $list[]=$value;//放入数组
    }
    ?>

    如果换一种思路,采用字符串处理,又该如何解决呢?

    字符串的查找 替换 拼接给了我一定的灵感,代码如下

    <?php
    $value=5;
    $list=array(1,2,3,4,5,6,7,8,9,10);
    $delimiter=",";
    $value=$delimiter.$value.$delimiter;
    $list =$delimiter.implode($delimiter,$list).$delimiter;
    if(strpos($list,$value)!==false)
    {
        //找到了 删除
        $list=str_replace($value,$delimiter,$list);
    }else{
        //没找到 添加
        $list=trim($list,$delimiter).$value;
    }
    $list=array_filter(explode($delimiter,$list));
    ?>

    或许你有更好的思路,欢迎留言

  • 相关阅读:
    #Linux 系统管理命令 | top命令
    Linux 操作文件目录
    背包问题(1)背包的引入
    硬币找零问题
    输入一个正数 n,输出所有和为 n 连续正数序列。 java实现
    张小二求职记之 单例模式(三)之决战多线程
    张小二求职 之单例模式(一)
    张小二求职记之 单例模式(二)
    待修改 nyoj 412 又是一个遗留问题
    nyoj 904 hashmap
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/7098187.html
Copyright © 2011-2022 走看看