由於工作需求,需要在sql查詢結果的字串中找出相同的數字,
表名:table
結構如下:
id, title, content
1, a, nvarchar(max)
2, b, nvarchar(max)
其中content中存的是以逗號相隔的數字,數字順序排列,不會重複,單條的資料量非常大,幾萬級別,格式如下:
1,23,
45,678,
2323
,2615
,6325,23232......
32,45
,128,
2323
,2615
,2861,13512,16802.......
現在要處理的是:
在上面查詢到的2個結果中,將content裡面的值相同的數字取出來,並存為以下格式:
45,2323,2615
解決思路:
1、
排序:由於字串是由數字組成,先對查詢結果的字串中的數字進行排序處理,排序函式vbs**如下:
'排序
function sortnum(numlist)
dim oarraylist, ielement
set oarraylist = createobject("system.collections.arraylist")
dim thisarray
thisarray = split(numlist, ",")
for ielement = 0 to ubound(thisarray)
oarraylist.add clng(thisarray(ielement))
next
oarraylist.sort '通過arraylist的sort方法對陣列進行排序
thisarray = oarraylist.toarray
sortnum = join(thisarray, ",") '返回字串
end function
如果數字是有規則的順序排序的話,則不需要使用此排序函式。
2、
交集:將排序好的字串轉換成陣列,然後進行交集處理,以下為交集函式vbs**:
'對2組字串進行交集處理
function getsamenum(idstra, idstrb)
getsamenum = ""
dim tmparraya, tmparrayb
dim alength, blength
dim ia, ib
tmparraya = split(idstra, ",") '將字串轉為陣列
alength = ubound(tmparraya)
ia = 0
tmparrayb = split(idstrb, ",") '將字串轉為陣列
blength = ubound(tmparrayb)
ib = 0
do while true
if ia>alength then
exit do
elseif ib>blength then
exit do
end if
valuea = clng(tmparraya(ia))
valueb = clng(tmparrayb(ib))
do while valuea > valueb
ib = ib + 1
if ib > blength then
exit do
end if
valueb = clng(tmparrayb(ib))
loop
do while valuea < valueb
ia = ia + 1
if ia > alength then
exit do
end if
valuea = clng(tmparraya(ia))
loop
if valuea = valueb then
getsamenum = getsamenum & "," & valuea
ia = ia + 1
ib = ib + 1
end if
loop
if getsamenum<>"" then
getsamenum = right(getsamenum, len(getsamenum)-1)
end if
end function
測試結果:
字串a轉為陣列後長度為:
51271
字串b轉為陣列後長度為:
79017
179.688毫秒
求陣列交集
注意 要求提供完整 如果可以編譯執行酌情加分。兩個已排序的整型陣列,求交集,最快演算法 輸入 兩個已排序的整型陣列 int a m b n 輸出 兩個陣列的交集 include include using namespace std 遞迴二分法,返回陣列中與目標值相等或小一號的下表 int sear...
陣列取交集
題目 給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 9,4 說明 方法一 set 主要利用set去重。class solution for int i...
去除A和B陣列中的交集
那位同學碰到新的演算法題了。去除a和b陣列中的交集 即去除a和b陣列中重複次數少的部分如a 111b 11,即去除b中的11 下面是我的解決方案,另希望他最後面試能過 class program int ar2 trycatch exception exc private static intget...