c# 字典按ascii 排序_利用工作表函数,对字典键进行排序并给出对应重复个数
大家好,今日我們繼續(xù)講解VBA數(shù)組與字典解決方案,今日的內(nèi)容是第58講,利用工作表函數(shù),對字典的鍵進(jìn)行排序,并給出對應(yīng)的重復(fù)個數(shù)。
對于排序,大家并不陌生,在之前的講解中,我也講了利用sort進(jìn)行排序的方法。今日我們講解利用工作表函數(shù)對數(shù)值排序.對于工作函數(shù),我這講利用了LARGE,還可以使用SMALL.都是可以的,這類函數(shù)在實際的應(yīng)用中也十分方便。
實例,我們看下面的數(shù)據(jù),在A列中有若干多的數(shù)據(jù),我們要對這些數(shù)值進(jìn)行排序,并將重復(fù)的次數(shù)記錄。
思路分析:我們要先將數(shù)據(jù)放到字典中,放的同時利用鍵值進(jìn)行累計出現(xiàn)重復(fù)的次數(shù),然后取出鍵和鍵值放到對應(yīng)的數(shù)組中,同時再建立一個數(shù)組用于存放排序的結(jié)果,然后在數(shù)組中提取數(shù)值,提取的時候是按照從大到小順序進(jìn)行。并將結(jié)果放到數(shù)組中,最后回填數(shù)據(jù)。下面看我給出的代碼:
Sub mynzsz_58() '第58講 利用工作表函數(shù),對字典的鍵進(jìn)行排序,并給出對應(yīng)的重復(fù)個數(shù)
Dim ran
Sheets("58").Select
Set mydic = CreateObject("Scripting.Dictionary") '字典
'將數(shù)據(jù)放入字典中,并計數(shù)
For Each ran In Sheets("58").Range("a2:a" & Range("a2").End(xlDown).Row)
If ran.Value <> "" Then
If Not mydic.exists(ran.Value) Then
mydic.Add ran.Value, 1 '初始值為1
Else
mydic(ran.Value) = mydic(ran.Value) + 1 '重復(fù)時累加
End If
End If
Next
'將字典的鍵和鍵值,取出,放到數(shù)組中
k = mydic.keys: T = mydic.items
'新建一個數(shù)組,用于放排序的結(jié)果
ReDim X(1 To mydic.Count, 1 To 2)
For i = 1 To mydic.Count
X(i, 1) = Application.Large(k, i) '按最大值的先后將數(shù)據(jù)放到數(shù)組中
X(i, 2) = mydic(X(i, 1)) '提取相應(yīng)的鍵值
Next
[e:f].Clear
[e1] = "排序": [f1] = "重復(fù)次數(shù)"
Sheets("58").[e2].Resize(mydic.Count, 2) = X
Set mydic = Nothing
End Sub
代碼截圖:
代碼講解:
1 上述代碼實現(xiàn)將數(shù)據(jù)放到字典mydic中,放的同時利用鍵值進(jìn)行累計出現(xiàn)重復(fù)的次數(shù),然后取出鍵和鍵值放到對應(yīng)的數(shù)組k,t中備用,同時再建立一個數(shù)組x用于存放排序的結(jié)果,然后在數(shù)組k中提取數(shù)值,提取是按照從大到小的順序進(jìn)行。并將結(jié)果放到數(shù)組x中,最后回填數(shù)據(jù)。
2 For Each ran In Sheets("58").Range("a2:a" & Range("a2").End(xlDown).Row)
If ran.Value <> "" Then
If Not mydic.exists(ran.Value) Then
mydic.Add ran.Value, 1 '初始值為1
Else
mydic(ran.Value) = mydic(ran.Value) + 1 '重復(fù)時累加
End If
End If
Next
上述代碼在將數(shù)據(jù)放到字典中,注意這里有一個是否重復(fù)的判定:Not mydic.exists(ran.Value)
3 '將字典的鍵和鍵值,取出,放到數(shù)組中
k = mydic.keys: T = mydic.items
此處要注意的是k 和 t 的含義,是一個一維數(shù)組,之后的代碼要在k中建立一個循環(huán)提取數(shù)值。
4 For i = 1 To mydic.Count
X(i, 1) = Application.Large(k, i) '按最大值的先后將數(shù)據(jù)放到數(shù)組中
X(i, 2) = mydic(X(i, 1)) '提取相應(yīng)的鍵值
Next
上述代碼按照i值在k中提取數(shù)據(jù),i是從小到大排序的,所以LARGE函數(shù)會相應(yīng)出現(xiàn)從大到小的排序,Application.Large(k, i),要注意這個工作表函數(shù)的用法. 將mydic(X(i, 1)) 提取相應(yīng)的鍵值放到X(i, 2)中
5 Sheets("58").[e2].Resize(mydic.Count, 2) = X
上述代碼回填數(shù)據(jù)
下面看代碼的運行:
今日內(nèi)容回向:
1 如何實現(xiàn)鍵的排序?
2 利用上述工作表函數(shù)如何實現(xiàn)從小到大的排序?
#2019生機(jī)大會#
總結(jié)
以上是生活随笔為你收集整理的c# 字典按ascii 排序_利用工作表函数,对字典键进行排序并给出对应重复个数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请问免费送精灵王,送不送技能石?
- 下一篇: proxmox 宕机转义_Proxmox