多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > 如何實現兩組字符串數據比較合并相同數據

如何實現兩組字符串數據比較合并相同數據

來源:程序員人生   發布時間:2013-11-30 21:45:23 閱讀次數:3561次
兩組字符串數據,需要比較其中相同的數據,并將其值相加并組成一個新的字符串數據

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
        Nums = Nums + Cint(getSPNum(s_array(j)))
        end if
    next
next

我們獲得了最終的值可以隨時將值賦到新的動態數組中,組合成最終的“組合數據”數組
redim Preserve result(p)
result(p) = getSPName(s_array(i)) & "=" & 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
        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
        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
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 免费看黄在线网站 | 精品国产免费久久久久久 | 欧美亚洲综合网 | 日本www在线 | 国产热视频| 成人小视频在线 | 欧美一级日韩在线观看 | 黑人日批 | 国产一级做a爰片... | 日韩欧美亚洲国产 | 国产1区2区3区在线观看 | 亚洲国产精品第一区二区 | 国产成人乱码一区二区三区在线 | 欧美大片一级毛片 | 娇小性色xxxxx | 欧美性精品 | 国产不卡免费视频 | 亚洲图片日韩 | 免费人成毛片乱码 | 亚洲国语| 欧美欧美欧美 | 日本不卡视频在线视频观看 | 黑人巨大xxxx| 69视频网址 | 91久久综合九色综合欧美亚洲 | freexxx性欧美vide0高清 | 毛片免费永久不卡视频观看 | 国产成人女人视频在线观看 | 国产不卡高清 | 欧美亚洲图片小说 | 中文字幕亚洲一区二区三区 | 亚洲成人偷拍 | 成人国产网站v片免费观看 成人国产亚洲 | 精品在线视频一区 | 高清视频在线观看+免费 | 性欧美videos hd| 亚洲国产一区二区三区 | 亚洲天堂资源网 | 在线观看日本www | 日本欧美一区二区三区免费不卡 | www.日本高清视频 |