如何检测js去数组重复项中的重复项

查看: 2894|回复: 10
数组如何快速查找是否存在重复值?
阅读权限20
在线时间 小时
各位前辈:
& && &我用VBA做了一个导入数据的小工具,就将一个表中的数据(每月产生)一对一地导入到我指定的工作表中,用于数据分析。
但是每月的源数据表中存在重复值,虽然我会要求相关人员查找并去掉重复值,但从软件严谨的角度上考虑,
在导入前还是要做一次“重复性”检查的。
为了提高速度,
我读取数据的原理是这样的,
先把源数据读入数组(内存中),同时新建一个一维数组(与源数据等高,即行数相同),在循环的过程中,对每一行的读取结果及失败原因进行描述,结束后将此数据反写入源数据表最后一列,
这样导完数据后,操作人员就能清楚地知道源数据有哪些记录未成功导入,是什么原因不成功。
再把目标工作表的关键检索列(即:索引字段)也读入数组,
同时也新建一个一维数组(与目标表格等高,即行数相同),
根据检索列通过循环比对源数据指定的列,
条件相符的,将数据写入到这个新的一维数组中,
循环结束后,将新的一维数组写入到指定的目标工作表的列。完成导入。
上面是整个工作原理。
现在我困惑的是读取之前对源数据的关键检索列(即:索引字段)进行重复值检查,
不需要找出重复值,
只有存在一个索引字段出现两次以上就提示“未清除重复值”,中断导入程序。
因为如果有重复值,会导致我读取的数据紊乱。(电脑是无法识别重复值中哪个是我们需要导入的正确值)
请问:数组中如何确认某列是否包含重复值?
注意:源数据超5000条10列数据,查找重复只是导入数据的小小前置程序,需要注意速度,最好控制在1秒钟左右结束。
网上有说字典法的Exists方法,
但是Exists只能判断是否存在,而无法跟踪每个值存在的次数。
如果有语句能循环出每个值的存在次数,那么只要判断次数是否包含大于等于2就能知道数组中某列是否有重复值了。
这个问题比较棘手,麻烦大侠们帮帮忙。
问题我已经描述得很清楚了,附件就不上传了。
我也是有一定编程基础的人,只要大侠们给个提示或关键语句思路就可以了。
阅读权限30
在线时间 小时
字典判断重复次数的例子随便搜就可以找到。
将要判断重复的数据赋值到数组的KEY 中,将次数放到item中。
for i=1 to 100
& & d(ar(i,1))=d(ar(i,1)) +1
这样重复一次,对应key的item就加一。
阅读权限95
在线时间 小时
用数组exists方法是最好的,速度也比较理想,你的目的是判断是否有重复值,不需要知道他的重复次数,如果想要知道重复次数,使用工作表函数countif比较理想
阅读权限50
在线时间 小时
& & & & & & & &
阅读权限20
在线时间 小时
没想到现在发贴不用审核了,真好!
更没想到这么热心的朋友回复。
首先回复2楼:
你的方法我测试过,非常棒。下面是我测试的代码:
Sub 字典查找重复值()
Dim I As Long
Dim Arr, Arr1, Arr2, D, X
Arr = Range(&A1:A& & [A10000].End(xlUp).Row) '在A列中输入人名作为模拟数据
Set D = CreateObject(&Scripting.Dictionary&)&&'建立字典对象
For I = 1 To UBound(Arr)&&'通过循环为字典赋值
&&D(Arr(I, 1)) = D(Arr(I, 1)) + 1&&'这个代码表达方式属于神级的,意思是不存在就生成一个,如果不存在对应的值Item为零,所以自身加1仍为1,如果存在,那么就不会再增加,只是Item值加1。[看网上的教材是很生硬的d.Keys(&A&)=?或d.Items(&A&)=?]
Arr1 = D.keys&&'将关键字赋值为一列数组,每一个都是唯一性的
Arr2 = D.items&&'将关键字对应的项(即循环出现的次数)赋值为一列数组
For Each X In Arr2&&'遍历Item数组
&&If X &= 2 Then&&'只要有一个大于等于1
& & MsgBox &存在重复值!&
& & Exit Sub&&'退出程序
MsgBox &不存在重复值!&
非常感谢2楼的朋友,为什么我搜了三天硬是没搜到呢?
其次回复3楼:
你说的用Exists方法最好,请问怎么写呢?
是的,我只需要知道是否有重复值,次数不需要知道。
帮人帮到底,能否写几句大概语句给我?
再次回复4楼:
你分享的是“蓝桥玄梦”版主的精华贴,这个我看了,并且专门做为学习记录保存了下来。
但上面教的只是让你非常明白字典的原理,
代码也是我上面所说的比较生硬的科班的传授,
像2楼那种神级的灵活应用才是最有实战意义的。
最后,不管如何!
谢谢所有回复的热心的朋友,
因为有你们,所以才有我的进步。
只要有时间,我也会毫不吝啬我所知道的东西的。
阅读权限95
在线时间 小时
没想到现在发贴不用审核了,真好!
更没想到这么热心的朋友回复。
用字典法不需要历遍数组所有元素,只要判断出有一个元素有重复即可退出程序:
For i = 1 To UBound(arr)
& & If Not d.Exists(arr(i, 1)) Then
& && &&&d.Add arr(i, 1), &&
& & Else
& && &&&MsgBox &存在重复值!&
& && &&&Exit Sub&&'退出程序
& & End If
Next
复制代码
阅读权限20
在线时间 小时
哇!这个更牛。
代码更精简,速度更快。
原理是一边循环赋值的同时即可做出判断:
如果不存在,增加关键字,Item为空。
如果循环到出现第一个存在的关键字时,即表示存在重复值,
即可马上中止程序。
确定提速不少,减少了好多运算量。
试想一下,如果重复值出现在前面几行,这个语句结构完成的效率太惊人啦!
不得不佩服山外有山,人外有人啊!
非常感谢6楼版主的指点。
你的点拔让我们有点醍醐灌顶的感觉。
阅读权限20
在线时间 小时
对了,6楼版主的方法应该也是3楼朋友的思路,对不?再次谢谢您。
阅读权限30
在线时间 小时
用字典法不需要历遍数组所有元素,只要判断出有一个元素有重复即可退出程序:
zhaogang1960兄,能否帮我看看,文本框内重复输入的问题,详见附件:
(16.19 KB, 下载次数: 18)
17:03 上传
点击文件名下载附件
阅读权限20
在线时间 小时
回复9楼的朋友:
因为你的求助挂在我的贴下,本能地就想看看能不能帮你什么。仔细研究了你的附件。
有一个问题:你这个窗体目的是不是获得一串不限个数(当然是你清单或按钮的范围内)且不重复的字符串,然后通过确定按钮传输到其他地方?
如果你的需求是这样的话,
我就纳闷了,
你为什么出现重复(或:按钮按两次)时,要全部清除Textbox1的内容呢?
If InStr(1, TextBox1, CommandButton9.Caption) &= 1 Then
MsgBox &错误一!& & Chr(13) & &重复输入。&
TextBox1 = Clear '清除
TextBox1.SetFocus
Else复制代码为什么不直接把Textbox1=Clear这句删除呢?
然后MsgBox &按钮重复!请点击下一按钮。”
如果是这样还需要Change事件吗?
因为你的级别比我高,我本能反应就是可能我的理解不对,但是我编码的水平差过你,但理解力能至少代表80%的人。
所以请你把需求说得再清楚点。让更多的人可以帮你出出主意。
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师正文 Js去掉数组中重复项的方法详解
Js去掉数组中重复项的方法详解
发布时间: & 编辑:
本文介绍下,用js去除数组中重复项(重复值)的一段代码,以及数组方法splice的具体用法,有需要的朋友可以作个参考。$a=array('2','1','2');//如何判断里面有几个相同的,并且知道相同的元素在什么位置求指点谢谢
--------------------------------------
获取相同元素的个数可以使用 array_count_values,这个获取&?$a=array('2','1','2');print_r(array_count_values($a));?&得出结果是Array ( [1] =& 1 [2] =& 2 )但是要想即只能得到相同个数并想知道下标的,目前想到的就是循环数组然后做比较了
--------------------------------------
我只写了一个统计相同元素,至于位置的话,去遍历$value!=1的元素就可以了$array=array("a","b","c","a","c","d","a");function search($ar){ $cnt=count($ar); $br=array(); ($i=0;$i&$$i++){
$t=$ar[$i];
//echo $t;
if(!$br[$t]){
$br[$t]=1;
$br[$t]++;
} } return $}$cr=search($array);print_r($cr);Array ( [a] =& 3 [b] =& 1 [c] =& 2 [d] =& 1 )
--------------------------------------
$a = array('2','1','2');$xt = array_diff(array_count_values($a), array(1));print_r($xt);foreach(array_keys($xt) as $v) {
echo $v, ': ', join(',', array_keys(array_filter($a, function($c) use ($v) { return $c == $v; })));}Array(
[2] =& 2)2: 0,2
--------------------------------------
这么晚了,感谢LS几位的帮忙哈,谢谢了查看: 1418|回复: 3
求教判断一个数组成员中是否有相同的数字,在线等
阅读权限70
在线时间 小时
结帖率: (55/64)
如题,判断一个数组成员中是否有相同的数字,
(1.19 KB, 下载次数: 15)
14:15 上传
点击文件名下载附件
添加一个文本型数组
计次循环首 取数组成员数
用寻找文本 判断 这个文本数组里 是否已经有
如果有就是重复的,如果没有 就添加到这个文本数组 每行一个 用#换行符
这样就知道哪个重复了
补充内容 ( 14:24):
给你说写法,比给你例子好,自己动手丰衣足食 比什么都强.
回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至
可获得加分喔。友情提醒:本版被采纳的主题可在
帖子申请荣誉值,获得 1点 荣誉值,荣誉值可兑换终身vip用户组哦。快捷通道: →
阅读权限180
在线时间 小时
签到天数: 5 天结帖率: (43/46)
添加一个文本型数组
计次循环首 取数组成员数
用寻找文本 判断 这个文本数组里 是否已经有
如果有就是重复的,如果没有 就添加到这个文本数组 每行一个 用#换行符
这样就知道哪个重复了
补充内容 ( 14:24):
给你说写法,比给你例子好,自己动手丰衣足食 比什么都强.
热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!
您可以选择打赏方式支持他
阅读权限140
在线时间 小时
签到天数: 6 天结帖率: (3/3)
判断数组去重后的成员数,与原始组数的成员数是否相等
您可以选择打赏方式支持他
阅读权限90
在线时间 小时
签到天数: 2 天结帖率: (5/6)
数组_去重复 (“文本数组”, “整数数组”)
用这个命令即可返回不重复的数组,精易模块,谢谢!请采纳!精易模块
您可以选择打赏方式支持他
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪
违法和不良信息举报电话,企业QQ: ,邮箱:@
Powered by
粤公网安备 25

我要回帖

更多关于 php数组去除重复 的文章

 

随机推荐