一、使用safeArray数组
我很惊讶jose为什么要提供vb数组safeArray,而且他对提供vb数组走了极端,分别提供了极其精简只限wstring类型的CwstrArray,和全功能的variant类型的CvariantArray。但想一想,也许这样子也有一定的好处,在多线程的模式下,还有比safeArray数组更好的数组吗?毕竟这是线程安全的,而且又易于使用。
提供CwstrArray字符串数组,是因为spit函数,必须有一个字符串数组来接收spit分割后字符串。不过在某些情况下,我们也是可以直接使用CwstrArray数组。如果要有VB交互的话,可以使用CvariantArray数组,但如果纯粹在FB下使用,没必要使用Variant和variant数组,那是在找虐。
cWstrArray数组和vb中使用数组还是有细微的差别。
(1)、vb中dim arr(4) as string,其中4表示数组的ubound是4,这样的数组其实是5个元素。
但CwstrArray(4)表示这个数组是4个元素,它的Ubound是3
(2) vb可以直接使用 arr(0)="这是一个测试",但cwstrArray.item(0)="这是一个测试",这个item无法省略
(3)在单线程模式下,不必担心数组是不是会lock,但在多线程模式下,你要注意数组加解锁问题,也就是accessData和UaccessData这两个方法最好是明确使用。
(4)字符串联接用+号,尽量不使用&,如果&号,你得注意是&**CwstrArray.item(0),2个*号,这个同样适用于Cwstr类中,使用&联接号必须使用 &**cwstr,使用+号没有任何问题,原因是因为&符号得先强制转换数据类型,先cast(),再进行拼接。
(5)vb中获得数组元素的数量,是ubound(Arr)-Lbound(Arr),但CwstrArray使用是CwstrArray.count直接返回元素数量
(6)cWstrArray数组中可以复制数组,可以嵌套数组,可以使用variant中的数组vt_Array(仅限于字符串类型数组)
#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是降序,默认是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库中也分别提供了wstring类型的dictionary和variant类型的dictionary。用法和VB中使用dictionary几乎一样。
cwstrDic类比vb的dictionary多了一个count方法,返回一个字典元素的数量。
说实话,我对afx库只提供dictionary,其实是非常失望的。一般最好使用mdtypes这个泛型的集合类库。