使用redim preserve创建一个在动态数组中输入到z的函数

时间:2015-02-05 12:47:58

标签: vb.net

我正在学习VB脚本,我对这个概念非常陌生......

请告诉我们如何编写以下程序

使用redim preserve创建一个在动态数组中输入到z的函数。

由于 库马尔

1 个答案:

答案 0 :(得分:0)

欢迎使用Stack Overflow。在询问任何未来的问题之前,请务必阅读this。请特别注意,Stack Overflow不是代码编写服务。换句话说,我们鼓励您首先尝试自己的解决方案,并将其与您的问题中的任何研究工作证据一起发布,我们可以帮助您解决代码中的错误或指向其他地方的解决方案。

话虽这么说,我知道你正在学习VB,我碰巧已经有了一个片段来做你想要的,所以这里是:

Const StartChar = "a"c
Const EndChar = "z"c
Dim converterOp As New Func(Of Char, Integer)(Function(input As Char) Char.ConvertToUtf32(input, 0))
Dim result() As Char = {}

For i = converterOp(StartChar) To converterOp(EndChar)
    ReDim Preserve result(UBound(result) + 1)
    result(UBound(result)) = CChar(Char.ConvertFromUtf32(i))
Next

给定一个字符范围内的起始字符和结束字符(在本例中为"a"c"z"c),它将两个字符转换为它们的Unicode代码点值,以便从数字开始循环以For循环结束。在每个循环迭代中,它将一个新的数组元素添加到数组的末尾,将当前循环索引(也就是在开始字符和结束字符之间的某个位置的Unicode代码点)转换回字符,并用该字符填充新的数组元素。

我知道您特别想使用ReDim Preserve来实现它,但这是一种更有效的方法,因为它不会产生在每次循环迭代中重新标注数组的开销:

Const StartChar = "a"c
Const EndChar = "z"c
Dim converterOp As New Func(Of Char, Integer)(Function(input As Char) Char.ConvertToUtf32(input, 0))
Dim intStartCodePoint = converterOp(StartChar)
Dim intEndCodePoint = converterOp(EndChar)
Dim result(intEndCodePoint - intStartCodePoint) As Char
Dim arrIndex = 0

For i = intStartCodePoint To intEndCodePoint
    result(arrIndex) = CChar(Char.ConvertFromUtf32(i))
    arrIndex += 1
Next

这里的区别在于它在进入循环之前对数组进行了维度,使用开始和结束代码点来计算数组的大小。

我希望这会有所帮助。