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