数组的高级性能
来源:互联网 发布:java jar无法加载主类 编辑:程序博客网 时间:2024/04/28 04:59
数组的高级功能
尽管数组最通常被用来存储成组的变量,但是在别的一些方面数组也是很有用的。可以将一个数组的内容赋值给另一个数组、创建返回数组的函数,还可以创建返回数组的属性。在许多情况下,这些技术能改进应用程序的性能。
数组赋值
正如可以将一个变量的值赋给另一个变量,例如 strA = strB ,也可以将一个数组的内容赋给另一个数组。试想,例如,要将一组字节从一个位置复制到另一个位置。可以通过每次复制一个字节来实现,象这样:
Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)
Dim i As Integer
ReDim newCopy (Lbound(oldCopy) To UBound(oldCopy)
For i – Lbound(oldCopy) To Ubound(oldCopy)
newCopy(i) = oldCopy(i)
Next
End Sub
一个更有效的方法就是将一个数组赋给另外一个数组:
Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)
newCopy = oldCopy
End Sub
关于变量赋值有一些规则需要铭记。例如,虽然可以将一个声明为整型的变量赋给一个声明为长整型的变量而不会产生任何问题,但是将一个长整型变量赋给一个整型变量就很容易导致溢出错误。除了有关数据类型的规则外,数组赋值还要遵从另外一些规则,包括数组维数,每一维的大小,以及数组是固定的还是动态的。
给维数和/或数据类型不同的数组赋值的尝试,可能成功,也可能失败,这取决于以下几个因素:
赋值符左边的数组类型:固定数组 (Dim x(1 to 10) As Integer) 或者动态数组 (Dim x() As Integer)。
赋值符左边数组的维数是否和赋值符右边数组的维数匹配。
赋值符两边数组的每一维的数组元素个数是否匹配。即使数组的声明不同,维数也可能匹配。比如一个数组的每一维元素从 0 开始编号而另一个则从 1 开始,维数也可能匹配。
赋值符两边所有元素的数据类型必须是相容的。这些规则和变量赋值的规则是一致的。
下表显示了这些因素的影响:
左边数组 维数是否匹配 元素个数是否匹配 赋值的结果
动态 否 是或否 成功。如果需要,左边将重新声明 (ReDim) 使其与右边匹配。
动态 是 否 成功。如果需要,左边将重新声明 (ReDim) 使其与右边匹配。
动态 是 是 成功。
固定 是或否 是或否 失败并返回一个编译错误。
错误可能发生在编译时,也可能发生在运行时(例如,如果数据类型不能强制转换或赋值试图重新声明 (ReDim) 一个固定大小的数组)。作为程序员,其任务就是添加错误处理以确保数组在赋值之前是相容的。
从函数返回数组
从一个函数返回一组值是可能实现的。例如,从一个函数返回一组字节而不必将其先转换为一个字符串然后再转换回来。
下面是一个返回字节数组的函数的简单示例:
Private Sub Form_Load()
Dim b As Byte
Dim I As Integer
Dim ReturnArray() As Byte
i = Cbyte(54)
ReturnArray() = ArrayFunction(b)
For i = 0 To Ubound(ReturnArray)
Debug.Print ReturnArray(i)
Next
End Sub
Public Function ArrayFunction(b As Byte) As Byte()
Dim x(2) As Byte
x(0) = b
x(1) = b + CByte(200)
x(2) = b + b
ArrayFunction = x
End Function
在运行以上示例后, ReturnArray() 是一个三元素数组,其中包含了分配给 ArrayFunction 中数组的值。注意,Exit Function 语句将一个数组作为参数传递;且数组的数据类型必须和函数的数据类型相同(在本例中是字节)。因为这是一个函数调用,传递数组时不必带括号。
注意 尽管可以通过赋值给另一个数组(ArrayFunction = x())来返回一个数组,但出于性能方面的考虑,并不推荐使用这种方法。
必须为返回数组的函数指定一个类型;这个类型可以是 Variant。这样一来,Function X() As Variant() 是有效的而 Function X() As () 将失败。
当调用一个返回数组的函数时,用来保存返回值的变量也必须是一个数组,而且其数据类型必须和函数相同,否则将显示一个“类型不匹配”的错误。
- 数组的高级性能
- Toolbar的高级性能
- 数组的高级函数
- C#高级编程七十六天----使用指针实现基于栈的高性能数组
- 一维数组的高级用法
- 高级语言及汇编的数组面相
- 数组和集合的高级用法
- 数组reduce方法的高级技巧
- PHP 数组的一些高级用法
- 处理数组的API,以及高级函数
- 《JS高级程序设计》--数组的创建
- 数组 reduce 方法的高级技巧
- 高级排序-快速排序-使用插入排序来处理小于10个数据项的子数组,使快速排序性能发挥到极致。
- react 高级性能
- spark性能优化-高级
- java高级性能增强
- 中国软件评测中心的高级性能测试培训教材
- C#高级编程五十九天----集合的性能
- 首次开版
- 深入理解Win32PE文件格式(1)
- 【收藏】六度分隔、六度空间(Six Degrees of Separation)理论
- Hibernate实体类 == 领域模型?《转载java视线》
- Siemens手机S65跳水价
- 数组的高级性能
- 来自佛学的智慧(转)
- Visual Basic 导出到 Excel 提速之法
- Tomcat的class加载的优先顺序
- 觉得自己不年轻了
- 北京建委稳定房价细则出台 禁止预售房转让
- vb怎么把图片加入到数据库里面
- 使用API调用Winodws各种通用对话框(Common Diaglog)的方法
- Hibernate的优点