前文讲述了通过Keys转换成数组进行排序,这是比较简单的案例,实际应用中,字典的使用会变得复杂,条件也变得多样。因此实际上,我们在更多的使用中,需要对Items进行排序。
如下表,我们需要对各科成绩求和,然后再对总成绩进行排序。
我们讲解一下代码的思路。
- 我们利用字典对各科成绩进行求和
- 把字典中的Keys和Items转换成数组
- 利用Large函数对Items的数组进行求值
- 利用Match函数求Items数组取值的位置
- 最后得到对应的Keys数组值
代码如下 :
Sub dsort()
Dim d, arr, brr, crr
Dim i, j, w
Set d = CreateObject("scripting.dictionary")
arr = Range("A2:C15")
For i = 1 To UBound(arr)
d(arr(i, 1)) = d(arr(i, 1)) + arr(i, 3)
Next i
'把字典的Keys和Items分别转换成数组
crr = d.keys
brr = d.items
For j = 1 To d.Count
Range("F" & j + 2) = Application.Large(brr, j)
w = Application.Match(Application.Large(brr, j), brr, 0) - 1
Range("E" & j + 2) = crr(w)
Next j
End Sub
利用上面的代码,我们就能输出我们想要的结果了。
在实际应用中,也可以把Keys和Items转换成二维数组,再对数组进行排序。后面我再贴上一份可以对数组进行排序的自定义函数。
另外,我们也可以把排序后的数据,赋值给新的字典,放入内存中,随时可以方便数据的输出。
字典的应用很繁杂,就看使用过程所涉及到的需求。
关于字典排序的内容大概就是这些了。喜欢的朋友请点赞加关注,谢谢!