使用字典快速獲取唯一值與重複值(交集與並集)

2021-09-10 13:46:10 字數 2469 閱讀 1883

資料處理工程中經常用到去重和取唯一值,或者取幾組資料的交集與並集,其實這兩類問題的求解思路是相同的。字典物件中的元素具備唯一性,因此經常被用來處理此類問題。

假設有如下資料集合,對於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...