如何快速判斷陣列中是否包含某個值

2021-08-19 06:27:29 字數 2849 閱讀 7029

多維陣列是經常用到的資料結構,判斷陣列中是否包含某個元素的常規辦法就是變數整個陣列,逐個對比。自定義函式如下:

function iteminarrayloop(adata, vele) as

boolean

iteminarrayloop = false

for i = 1

to ubund(adata, 1)

for j = 1

to ubound(adata, 2)

if adata(i, j) = vitem then

iteminarrayloop = true

exit

function

endif

next j

next i

endfunction

函式返回值為布林型別。簡單的測試**:

sub demo_loop()

dim a(1

to10, 1

to10), b(1

to10, 1

to10), i, j

for i = 1

to10

for j = 1

to10

a(i, j) = i + j

b(i, j) = cstr(i + j)

next

next

debug.print iteminarrayloop(a(), 10) ' true

debug.print iteminarrayloop(a(), 20) ' false, 沒有20

debug.print iteminarrayloop(a(), "10") ' false, 資料型別不匹配

debug.print iteminarrayloop(b(), "10") ' true

endsub

在陣列元素比較多或者維度維度比較多的時候,迴圈判斷效率就會較低。既然是vba的解決方案,肯定可以考慮利用工作表還是來提高效率。

工作表函式match進行快速判斷陣列中是否包含某個值,但是只支援一維陣列,幸運的是,

工作表函式index可以用來實現陣列切片,也就是多維陣列的一部分可以轉換為一維陣列。

function iteminarray(adata, vele) as boolean

iteminarray = false

if vba.isarray(adata) then

for i = lbound(adata, 2) to

ubound(adata, 2)

if iteminarray then

exit

function

next i

endifend

function

測試**如下,結果與迴圈判斷完全相同。

sub demo()

dim a(1

to10, 1

to10), b(1

to10, 1

to10), i, j

for i = 1

to10

for j = 1

to10

a(i, j) = i + j

b(i, j) = cstr(i + j)

next

next

debug.print iteminarray(a(), 10) ' true

debug.print iteminarray(a(), 20) ' false, 沒有20

debug.print iteminarray(a(), "10") ' false, 資料型別不匹配

debug.print iteminarray(b(), "10") ' true

endsub

vba的fitler函式可以實現在陣列中查詢,但是有如下限制:

sub demo_filter()

dim a(1

to10) as

string, i, ares

for i = 1

to10

a(i) = i

next

ares = vba.filter(a(), "1")

debug.print join(ares, ",")

endsub

對於字串陣列,如果陣列元素是規範的資料,那麼使用instr判斷會更加簡潔。

sub demo()

akey = array("r01", "r02", "r03")

' option 1

skeylist = join(akey, "|")

debug.print instr(1, skeylist, "r01", vbtextcompare) > 0

debug.print instr(1, skeylist, "r11", vbtextcompare) > 0

' option 2

debug.print ubound(vba.filter(akey, "r01", , vbtextcompare)) = 0

debug.print ubound(vba.filter(akey, "r11", , vbtextcompare)) = 0 ' 不存在時,ubound返回的結果為-1

end sub

先用join函式將陣列連線為乙個字串,資料元素用」|」作為分隔符,然後使用instr判斷查詢的字元是否包含在該字串中。這個應用場景中,也可以使用filter函式實現。

java中如何高效判斷陣列中是否包含某個特定的值

public static boolean uselist string arr,string targetvalue public static boolean useset string arr,string targetvalue public static boolean useloop s...

node js 判斷陣列中是否包含某個值

判斷陣列中是否包含某個值這裡有四種方法。用的測試資料 let arr a b c let arr2 in操作符針對的是key,而非value。而對於普通的一維陣列來說,key是隱藏的。所以,對於判斷某個陣列中是否含有某個值來說,這個方案並不合適。console.log 1 a in arr fals...

判斷陣列中是否包含某個元素 iOS

日常開發中經常會遇到陣列中是否包含某個元素的情況,api 中扒一扒方法後,如下方法可以簡單便捷的遍歷出來,具體 code 如下 方法一 nsstring key receipt bool isbool arrdata containsobject key if isbool else方法二 nsin...