一、使用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这个泛型的集合类库。 |
|
来自: nxhujiee > 《◆VisualFreeBasic》