欢迎大家来到IT世界,在知识的湖畔探索吧!
这是关于字典的第二篇文章,聊聊字典的应用之去重,统计和求和
我们这边说的去重,也就是平常所说的求不重复值的问题。
如下图所示,这是一份成绩单。
姓名 |
科目 |
成绩 |
张三 |
语文 |
90 |
张三 |
数学 |
96 |
张三 |
英语 |
92 |
李四 |
语文 |
93 |
李四 |
数学 |
94 |
李四 |
英语 |
100 |
李四 |
科学 |
99 |
王五 |
语文 |
96 |
王五 |
数学 |
97 |
王五 |
英语 |
100 |
孙七 |
语文 |
99 |
孙七 |
数学 |
89 |
孙七 |
英语 |
90 |
孙七 |
科学 |
95 |
首先,第一个问题,我们要统计共有几个人。也就是我们所说的去重。
代码如下:
Dim d As Object Dim i As Long Dim mingzi As String Set d = CreateObject("Scripting.Dictionary") For i = 2 To [a65536].End(xlUp).Row mingzi = Cells(i, 1) If Not d.Exists(mingzi) Then d.Add mingzi, "" End If Next i MsgBox d.Count
欢迎大家来到IT世界,在知识的湖畔探索吧!
对以上代码简单地说明一下。
- If Not d.Exists(mingzi) Then 如果字典d 中 mingzi 不存在的话,然后就add 对应的mingzi。
- d.Count 即统计字典中名字的个数。
第二个问题,李四参加了几个科目的考试?这也是我们所说的计数。
代码其实非常简单,首先我们要判断,如果字典d中存在了这个mingzi,那我们在item中对这个mingzi的item值进行累加1即可。
代码稍加修改即可:
欢迎大家来到IT世界,在知识的湖畔探索吧!Dim d As Object Dim i As Long Dim mingzi As String Set d = CreateObject("Scripting.Dictionary") For i = 2 To [a65536].End(xlUp).Row mingzi = Cells(i, 1) If Not d.Exists(mingzi) Then d.Add mingzi, 1 Else d(mingzi) = d(mingzi) + 1 End If Next i MsgBox d("张三") MsgBox d("李四")
d(mingzi) = d(mingzi) + 1 实际上就是对Key键对应的Item值进行累加。
接下来第三个问题,求每个人的总分。也就是我们所要说的求和。
其实求和与统计的方法是一样的,只是item赋的值不一样罢了。
代码仍然稍加修改:
Dim d As Object Dim i As Long Dim mingzi As String Dim chenji As Integer Set d = CreateObject("Scripting.Dictionary") For i = 2 To [a65536].End(xlUp).Row mingzi = Cells(i, 1) chengji = Cells(i, 3) If Not d.Exists(mingzi) Then d.Add mingzi, chengji Else d(mingzi) = d(mingzi) + chengji End If Next i MsgBox d("张三") MsgBox d("李四")
我们通过字典的Exists方法,便实现了数据的简单去重,统计和求和的功能。
通过上面的代码,我们能非常清晰地理解各句代码的含义。
但实际上,我们仍可以把代码简化一下,提高代码的运行效率。
欢迎大家来到IT世界,在知识的湖畔探索吧!Dim d As Object Dim i As Long Dim mingzi As String Dim chenji As Integer Set d = CreateObject("Scripting.Dictionary") For i = 2 To [a65536].End(xlUp).Row mingzi = Cells(i, 1) chengji = Cells(i, 3) d(mingzi) = d(mingzi) + chengji Next i MsgBox d("张三") MsgBox d("李四")
文中代码都是比较简单的应用,后续我们再举较多的例子来讨论字典更多的好的应用。
我始终觉得,字典这个工具,实际应用中,可以做很多的工作,并且相对于数组来说,更好理解。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/99217.html