陣列排序和交集

2021-06-21 09:57:40 字數 2449 閱讀 6884

由於工作需求,需要在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...