資料處理工程中經常用到去重和取唯一值,或者取幾組資料的交集與並集,其實這兩類問題的求解思路是相同的。字典物件中的元素具備唯一性,因此經常被用來處理此類問題。
假設有如下資料集合,對於b列和c列資料需要求取交集和並集等資料集合。
示例**如下:
'option explicit
sub loaddata()
dim adata, ares, lst, irow, icol, ikeycol
dim bdic, cdic, bcdic, bnotcdic, cnotbdic, alldic
const columns_qty = 3
with activesheet
ikeycol = 1
lst = .cells(.rows.count, ikeycol).end(xlup).row
adata = .cells(1, ikeycol).resize(lst, columns_qty).value
set bdic = createobject("scripting.dictionary")
set cdic = createobject("scripting.dictionary")
set bcdic = createobject("scripting.dictionary")
set bnotcdic = createobject("scripting.dictionary")
set cnotbdic = createobject("scripting.dictionary")
set alldic = createobject("scripting.dictionary")
for irow = 1 to ubound(adata, 1)
keyb = adata(irow, 2)
if not bdic.exists(keyb) then bdic(keyb) = keyb
keyc = adata(irow, 3)
if not cdic.exists(keyc) then cdic(keyc) = keyc
next irow
for each b in bdic.keys
if cdic.exists(b) then
bcdic(b) = b
else
bnotcdic(b) = b
end if
alldic(b) = b
next b
for each c in cdic.keys
if not bdic.exists(c) then
cnotbdic(c) = c
alldic(c) = c
end if
next c
range("e:h").clear
range("e1:h1").value = array("b和c公有", "b獨有", "c獨有", "b和c並集")
end with
set bdic = nothing
set cdic = nothing
set bcdic = nothing
set bnotcdic = nothing
set cnotbdic = nothing
set alldic = nothing
end sub
【**解析】
第8行**指定用於定位最後資料行的資料列,示例**中使用a列。
第9行**使用end(xlup)
定位最後一行資料所在行。
第10行**將資料載入到陣列中,便於後續處理。
第11行到第16行**建立6個字典物件。
變數名稱
用途bdic
b列資料唯一值
cdic
c列資料唯一值
bcdic
b列和c列公用有資料,即交集
bnotcdic
b列不存在於c列中的資料
cnotbdic
c列不存在於b列中的資料
alldic
b列和c列資料的合集,即並集
第24行**和第32行**使用字典物件的exists屬性
判斷指定關鍵字是否已經存在於字典的keys
中。
第23行到26行**通過迴圈判斷,獲取四個字典物件。
第38行**寫入結果標題行。
第39行到第42行**分別將資料寫入指定列。
第44行到第49行**清空物件變數,釋放系統資源。
示例**執行結果如下。
使用字典物件獲取資料唯一值與重複值的其他應用場景與此示例基本上是大同小異的,只需要做少量**修改即可。
唯一值獲取
問題 唯一值無法獲取 using system.collections.generic using esri.arcgis.carto using esri.arcgis.geodatabase using system.collections 官網示例 idatastatistics exampl...
mysql 唯一值 mysql 獲取全域性唯一值
在涉及資料庫儲存資料的時候,經常會遇到唯一值問題,有的是主鍵帶來的限制,有的則是業務上的需要。下面介紹幾種唯一值的獲取或者生產方法 先建乙個測試用的表tbl user,有三個字段 id name age,其中id為主鍵。1 drop table if exists tbl user 2 create...
mysql 獲取全域性唯一值
在涉及資料庫儲存資料的時候,經常會遇到唯一值問題,有的是主鍵帶來的限制,有的則是業務上的需要。下面介紹幾種唯一值的獲取或者生產方法 先建乙個測試用的表tbl user,有三個字段 id name age,其中id為主鍵。drop table if exists tbl user create tab...