ios 数组中的字典排序_利用数组和字典,实现按指定规则的排序
大家好,今日我們繼續講解數組與字典解決方案,今日講解第47講:利用字典和數組,實現按指定規則的排序。隨著字典講解的深入,我們發現字典真的很神奇,在VBA代碼中,給人以十分清爽的感覺,在這套數組與字典解決方案中,我會盡可能的把經常用到的實例多多講解給大家,讓大家對于字典的理解更加深入.雖然這塊內容利用其它方案都可以實現,但是字典確實能大大簡化我們的代碼.讓我們對于VBA的理解更深入.
今日實例是實現按指定規則的排序,為什么會有這個課題呢?對于職場中的我們經常會用到數據分析,往往數據來源不一致,同樣項目,由于來源不同,往往排序的方式不同,而且有時候要求提交數據的排序并不是EXCEL自帶功能可以解決的,這個時候怎么辦?我們依然可以用字典來幫助解決,我們看下面的數據:
大家注意到,在A,B列中,給出了排序的規則,在D,E,F列中是提供的報表數據,但這個數據報表的排序不符合A,B列的排序規則,我們要實現的是把報表數據按照固定的規則來排序,如何做到呢?下面看我給出的代碼:
Sub mynzsz_47() '第47講 利用數組和字典,實現按指定規則的排序
Sheets("47").Select
Dim mybrr()
'建立字典
Set myDic = CreateObject("Scripting.Dictionary")
'把數據裝入數組
myarr = Range("a2:f" & [a65536].End(xlUp).Row)
'動態數組的再分配
ReDim mybrr(1 To UBound(myarr), 1 To 4)
'字典的賦值,也是排序規則的建立
For i = 1 To UBound(myarr)
myDic(CStr(myarr(i, 1))) = i
Next i
'給定數據的排序,其實是把給定的數據,按照字典建立的規則放到另外一個數組中
For i = 2 To Cells(65536, 4).End(xlUp).Row
If myDic(CStr(myarr(i - 1, 4))) <> "" Then
mybrr(myDic(CStr(myarr(i - 1, 4))), 1) = myarr(i - 1, 4)
mybrr(myDic(CStr(myarr(i - 1, 4))), 2) = myarr(i - 1, 5)
mybrr(myDic(CStr(myarr(i - 1, 4))), 3) = myarr(i - 1, 6)
End If
Next i
'數據的回填
[d2].Resize(UBound(mybrr), 3) = mybrr
End Sub
代碼的截圖:
代碼講解:
1 上述代碼實現了數據按指定規則排序,只要給定規則,就可以實現數據的自定義排序。
2 '把數據裝入數組
myarr = Range("a2:f" & [a65536].End(xlUp).Row)
上述代碼將數據放到數組中,在實際應用中,也可以將規則數據和報表數據分別放在不同的數組中。
3 '動態數組的再分配
ReDim mybrr(1 To UBound(myarr), 1 To 4)
這個動態數組是用來裝排序完成的數據的。
4 '字典的賦值,也是排序規則的建立
For i = 1 To UBound(myarr)
myDic(CStr(myarr(i, 1))) = i
Next i
大家要注意這幾行代碼即給字典賦值同時又用鍵值定義了排序的規則,大家可以理解一下。
5 '給定數據的排序,其實是把給定的數據,按照字典建立的規則放到另外一個數組中
For i = 2 To Cells(65536, 4).End(xlUp).Row
If myDic(CStr(myarr(i - 1, 4))) <> "" Then
mybrr(myDic(CStr(myarr(i - 1, 4))), 1) = myarr(i - 1, 4)
mybrr(myDic(CStr(myarr(i - 1, 4))), 2) = myarr(i - 1, 5)
mybrr(myDic(CStr(myarr(i - 1, 4))), 3) = myarr(i - 1, 6)
End If
Next i
在上述代碼中,首先在字典中查找報表數據在字典中是否存在,如果存在,那么就存放到存放排序結果的數組中,但是放在結果數組中的時候,存放順序是鍵值給出的順序。
6 '數據的回填
[d2].Resize(UBound(mybrr), 3) = mybrr
將排序的結果回填到數據區域.
下面看代碼的運行結果:
今日內容回向:
1 如何實現報表數據按指定規則的排序?
2 myDic(CStr(myarr(i, 1))) = I 的意義是什么?
總結
以上是生活随笔為你收集整理的ios 数组中的字典排序_利用数组和字典,实现按指定规则的排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode-无重复字符的最长子串
- 下一篇: Leetcode-最佳买卖股票机含冷冻期