元素与集合的问题思考
今天同事遇到一个元素和集合的问题,引发了我的思考。情景如下
一个元素和集合,如果元素在集合内,则移除该集合内的这个元素,否则添加该元素进入这个集合。
他给出代码如下:
<?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)); ?>
或许你有更好的思路,欢迎留言
转载于:https://www.cnblogs.com/lizhaoyao/p/7098187.html
元素与集合的问题思考相关推荐
- golang 排序list_Go语言使用sort包对任意类型元素的集合进行排序的方法
本文实例讲述了Go语言使用sort包对任意类型元素的集合进行排序的方法.分享给大家供大家参考.具体如下: 使用sort包的函数进行排序时,集合需要实现sort.Inteface接口,该接口中有三个方法 ...
- 【Groovy】集合遍历 ( 操作符重载 | 集合中的 “ << “ 操作符重载 | 使用集合中的 “ << “ 操作符添加一个元素 | 使用集合中的 “ << “ 操作符添加一个集合 )
文章目录 一.集合中的 " << " 操作符重载 1.使用集合中的 " << " 操作符添加一个元素 2.使用集合中的 " & ...
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin
1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...
- set集合判断集合中是否有无元素_集合 (Set) | 一山不容二虎的 Python 数据类型
点击上方"可乐python说"关注公众号,点击右上角 "..."选择"设为星标"第一时间获取最新分享! 前言 Hi,大家好,我是可乐, 今天 ...
- 离散数学反对称关系_【离散数学】1.2&1.3集合与元素,集合与集合之间的关系...
离散数学是编程人员进阶的必修科目,是计算机专业学生的基础课程之一,多为理论性知识,较抽象. [离散数学]第一章(集合论基础)的小节主要有: 1.1集合的定义和表示 1.2集合与元素的关系 1.3集合与 ...
- LoadRunner几个重要的概念:事务、集合点、思考时间
LoadRunner事务集合点思考时间 在LoadRunner的脚步编写中,有三个重要的概念:事务.集合点.思考时间 事务: 事务又称为Transaction,在LoadRunner中的定义如下:A ...
- android list 替换元素_Java 集合(二)——Set 集合、List 集合和 Collections 工具类...
一.前言 在 Java 集合(一)中我们已经讲了 Collection 集合接口.Iterator 迭代器和泛型,今天我们来讲 Set 集合.List 集合 和 Collections 工具类. 二. ...
- python集合的元素可以是_Python - 集合与元素之集合定义和基本操作方法
原博文 2019-10-05 14:58 − 集合(set) 定义:由不同元素组成的集合,集合中是一组无序排列可hash的值(不可变的值)例如数字.字符串.元组,可以作为字典的key 定义集合: # ...
- DOM初探(16)——查看元素的集合尺寸
三:DOM基本操作: 查看元素的集合尺寸 domEle.getBoundingClientRect(); 兼容性很好 改方法返回一个对象,对象里面有left,top,right,bottom等属性.l ...
最新文章
- 日订单50万级分布式事务
- 最长上升子序列之基础
- Wannafly挑战赛22游记
- 快速使用Vue3最新的15个常用API
- NumPy 基础知识·翻译完成
- Python+numpy实现蒙特卡罗方法估计圆周率近似值
- java开发_mysql中获取数据库表描述_源码下载
- java 错误码设计_关于Java中异常的设计
- mysql lastid_轻松掌握MySQL函数中的last_insert_id()
- 【GD32L233C-START】11、GD32 ISP软件还不支持GD32L233
- 【图像特征提取】基于matlab脉冲耦合神经网络(PCNN)图像特征提取【含Matlab源码 1868期】
- p1530 Fractions to Decimals
- 史上最全:Jetbrains全家桶31款软件 分类+功能整理收集
- 重写equals方法原则
- C与C++中的常用符号与标点用法详解及实例
- P5266 【深基17.例6】学籍管理
- 羽毛球单打和双打的有效边界区域
- 靶机渗透-----DC-2
- 从DWG导入SKP的准备工作
- Java高级技术梳理
热门文章
- Android TextView,EditText要求固定行数自动调整TextSize
- python战斗2:看到一个页面编码
- 可执行镜像——开发环境的Docker化之路
- 如果安装License失败的解决方案
- CentOS英文版下安装中文语言包
- 八年级信息技术认识计算机网络,初二信息技术课名称:认识计算机网络.doc
- 【Mac Buf Install Solution】Mac Buf Not Provide support for this old version Solution
- 我将要关注的kaggle比赛
- c语言多线程面试题,iOS面试题--网络多线程
- Java Class 文件结构