一、使用safeArray數(shù)組
我很驚訝jose為什么要提供vb數(shù)組safeArray,而且他對(duì)提供vb數(shù)組走了極端,分別提供了極其精簡(jiǎn)只限wstring類型的CwstrArray,和全功能的variant類型的CvariantArray。但想一想,也許這樣子也有一定的好處,在多線程的模式下,還有比safeArray數(shù)組更好的數(shù)組嗎?畢竟這是線程安全的,而且又易于使用。
提供CwstrArray字符串?dāng)?shù)組,是因?yàn)閟pit函數(shù),必須有一個(gè)字符串?dāng)?shù)組來(lái)接收spit分割后字符串。不過在某些情況下,我們也是可以直接使用CwstrArray數(shù)組。如果要有VB交互的話,可以使用CvariantArray數(shù)組,但如果純粹在FB下使用,沒必要使用Variant和variant數(shù)組,那是在找虐。
cWstrArray數(shù)組和vb中使用數(shù)組還是有細(xì)微的差別。
(1)、vb中dim arr(4) as string,其中4表示數(shù)組的ubound是4,這樣的數(shù)組其實(shí)是5個(gè)元素。
但CwstrArray(4)表示這個(gè)數(shù)組是4個(gè)元素,它的Ubound是3
(2) vb可以直接使用 arr(0)="這是一個(gè)測(cè)試",但cwstrArray.item(0)="這是一個(gè)測(cè)試",這個(gè)item無(wú)法省略
(3)在單線程模式下,不必?fù)?dān)心數(shù)組是不是會(huì)lock,但在多線程模式下,你要注意數(shù)組加解鎖問題,也就是accessData和UaccessData這兩個(gè)方法最好是明確使用。
(4)字符串聯(lián)接用+號(hào),盡量不使用&,如果&號(hào),你得注意是&**CwstrArray.item(0),2個(gè)*號(hào),這個(gè)同樣適用于Cwstr類中,使用&聯(lián)接號(hào)必須使用 &**cwstr,使用+號(hào)沒有任何問題,原因是因?yàn)?amp;符號(hào)得先強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型,先cast(),再進(jìn)行拼接。
(5)vb中獲得數(shù)組元素的數(shù)量,是ubound(Arr)-Lbound(Arr),但CwstrArray使用是CwstrArray.count直接返回元素?cái)?shù)量
(6)cWstrArray數(shù)組中可以復(fù)制數(shù)組,可以嵌套數(shù)組,可以使用variant中的數(shù)組vt_Array(僅限于字符串類型數(shù)組)
#include once "afx/cwstrArray.inc"
#include once "afx/cwindow.inc"
dim myArr as cwstrArray=cwstrArray(4)
myArr.item(0)="1"
myArr.item(1)="2"
myArr.item(2)="3"
myArr.item(3)="4"
myarr.sort(false) 'false是降序,默認(rèn)是true是升序
'afxmsg "one = " & myarr.item(0) & "two= " & myArr.item(1) & "Three= " & myArr.item(2) & "four=" & myArr.item(3)
afxmsg "one = " + myarr.item(0) + "two= " + myArr.item(1) + "Three= " + myArr.item(2) + "four=" + myArr.item(3)
二、使用字典dictionary
afx庫(kù)中也分別提供了wstring類型的dictionary和variant類型的dictionary。用法和VB中使用dictionary幾乎一樣。
cwstrDic類比vb的dictionary多了一個(gè)count方法,返回一個(gè)字典元素的數(shù)量。
說(shuō)實(shí)話,我對(duì)afx庫(kù)只提供dictionary,其實(shí)是非常失望的。一般最好使用mdtypes這個(gè)泛型的集合類庫(kù)。