asp兩組字串資料比較合併相同資料

2022-09-21 23:12:16 字數 4905 閱讀 9587

a1="sp2=20;sp1=34;"

a2="sp3=2;sp2=3;sp1=4;"

兩組字串資料,將字串中相同的資料值相加後得到新的一組資料

即「sp3=2;sp2=23;sp1=38」

(p.s 乙個簡單的應用:商品二原有數量20件,商品一原有數量34件,新進貨或者新**了商品二3件,商品一4件等型別模擬情況下計算出進貨量,銷售量和庫存量,小型的進銷存系統可採用這樣的方法)

那麼如何實現兩組字串資料比較合併相同資料?

第一,將兩組字串資料進行連線組合

a3=a1&a2

那麼a3="sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;"

第二,將a3中相同的資料進行值的相加

這裡主要解決的是如何尋找到相同的資料

首先因為現在a3就是由 sp2、sp1、sp3、sp2和sp1組成,需要把相同的sp2和sp1單獨找出來再進行值得相加。

通過split函式分割「;」為分隔符獲得每塊資料和值。

即 s_array = split(a3,";")通過for i = 0 to ubound(s_array)迴圈我們可以獲得單獨的各項資料及值

其中每項的格式是類似「sp2=20」,要將sp2提取出來才能和同組中的資料進行比較,所以還需要獨立函式進行提取

function getspname(sp)

getspname = split(sp,"=")(0)

end function

function getspnum(sp)

getspnum = split(sp,"=")(1)

end function

分別獲得「=」前的資料名稱和「=」後的資料值。

其次每塊資料都分解下來了,就是如何尋找到相同的資料名稱。

我們假設這樣的流程,首先將a3陣列中的第一元素提取,通過和除第一元素之前以為的資料進行比較,如果有相同則進行相加。

s_array = split(a3,";")

for i = 0 to ubound(s_array)

for j=i+1 to ubound(s_array)

if getspname(s_array(i)) = getspname(s_array(j)) then

&nb程式設計客棧sp;     nums = nums + cint(getspnum(s_array(j)))

end if

next

next

我們獲得了最終的值可以隨時將值賦到新的動態陣列中,組合成最終的「組合資料」陣列

redim preserve result(p)

result(p) = getspname(s_array(i)) & "=" &&nwww.cppcns.combsp;nums

即 s_array = split(a3,";")

for i = 0 to ubound(s_array)

for j=i+1 to ubound(s_array)

if getspname(s_array(i)) = getspname(s_array(j)) then

&nbswww.cppcns.comp;nums = nums + cint(getspnum(s_array(j)))

end if

next

redim preserve result(p)

result(p) = getspname(s_array(i)) & "=" & nums

p=p+1

next

這個裡面勢必會遇到這樣的乙個情況:當a3陣列中的其後的某一元素總會與之前比較的相同的元素進行了運算,所以該元素就不能計入 for i = 0 to ubound(s_array)內的result(p) = getspname(s_array(i)) & "=" & nums動態陣列中去。

如何解決不再運算比較已經被比較運算過的元素

我們必須對已經比較運算過的元素進行標記,比如a3陣列中(a3="sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;")取出sp2=20後會比較運算到後乙個sp2=3,此時比較運算後將sp2=3的陣列元素編號進行標記,下次迴圈比較時該元素不計在內。

s_array = split(a3,";")

for i = 0 to ubound(s_array)

for j=i+1 to ubound(s_array)

if getspname(s_array(i)) = getspname(s_array(j)) then

&nb程式設計客棧sp;nums = nums + cint(getspnum(s_array(j)))

end if

redim preserve id(q)

id(q) = j

q = q + 1

next

redim preserve result(p)

result(p) = getspname(s_array(i)) & "=" & nums

p=p+1

next

其中定義id(q)=j就是將當前比較相同的該元素標記,並賦值於動態陣列id(q),q預設定義為0,再次迴圈q=q+1

那麼有力該標記,我們就可以有選擇性的選擇比較累加了。

定義函式

function isinid(j)

dim x

isinid = false

for each x in id

if x = j then 

isinid = true

exit function

end if

next

end function

主要函式為

function mainhb(s)

s_array = split(s,";")

for i = 0 to ubound(s_array)

if not isinid(i) then

nums = getspnum(s_array(i))

for j=i+1 to ubound(s_array)

if getspname(s_array(i)) = getspname(s_array(j)) then 

nums = nums + cint(getspnum(s_array(j)))

redim preserve id(q)

id(q) = j

q = q + 1

end if

next

redim preserve result(p)

result(p) = getspname(s_array(i)) & "=" & nums

p = p + 1

end if

next

for each x in result

mainhb=mainhb&x&";"

next

end function

整體函式為

dim result()

dim id()

dim p , q , nums

p=0

q= 0 

nums = 0

redim preserve id(q)

id(q) = ""

s = "sp4=33;sp2=20;sp1=34;sp3=2;sp2=3;sp4=4;"

s = left(s,len(s)-1)

response.write mainhb(s)

function mainhb(s)

s_array = split(s,";")

for i = 0 to ubound(s_array)

if not isinid(i) then 

nums = getspnum(s_array(i))

for j=i+1 to ubound(s_array)

if getspname(s_array(i)) = getspname(s_array(j)) then 

nums = nums + cint(getspnum(s_array(j)))

redim preserve id(q)

id(q) = j

q = q + 1

end if

next

redim preserve result(p)

result(p) = getspname(s_array(i)) & "=" & nums

p = p + 1

end if

'nums = 0

next

for each x in result

mainhb=mainhb&x&";"

next

end function

function getspname(sp)

getspname = split(sp,"=")(0)

end function

function getspnum(sp)

getspnum = split(sp,"=")(1)

end function

function isinid(j)

dim x

isinid = false

for each x in id

if x = j then 

isinid = true

exit function

end if

next

end function

%> 

[ctrl+a 全選 注:如需引入外部js需重新整理才能執行]

本文標題: asp兩組字串資料比較合併相同資料

本文位址:

兩組字串去重 兩個列表去重

已知字串a 1,2,3,4,5,6,7,8 已知字串b 1,3,4 獲取他們不相同的部分 當後端需要返回給前端完整的任務列表,任務列表一共有八個,已知完成了三個任務 從資料庫中獲取 如何取得未完成的任務列表 方法一 把總任務列表和已完成的任務列表,放入list的集合中,遍歷總完成的任務列表,依次跟已...

839 相似字串組

839.相似字串組 如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱x和y兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換0與2的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts ...

839 相似字串組

難度困難93 如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱x和y兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換0與2的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts 相似。...