从字符串数组中创建一个字符串。最快的方法?

问题描述:

我有一串字符串(A到E),我想加入到一个字符串(“A B C D E”)。我应该循环访问数组还是使用Join函数?从字符串数组中创建一个字符串。最快的方法?

Dim MyArray(5) as String 
Dim MyString as String 

MyArray(1) = "A" 
MyArray(2) = "B" 
MyArray(3) = "C" 
MyArray(4) = "D" 
MyArray(5) = "E" 

哪个更快,更明智?

This?

MyString = MyArray(1) 
For i = 2 To 5 
    MyString = MyString & " " & MyArray(i) 
Next 

或者这个?

MyString = Join(MyArray, " ") 
+2

我想加盟会更快,因为它在本地Code的实现,当你在与for循环每次迭代成长串并调用连接操作两次,也许让系统时间之前和之后(含一个更大的阵列)可以给出一些线索,哪一个更好。 – Tensibai

+1

我建议使用更易于个人阅读的解决方案。对我来说,这将是Join,因为它在概念上更简单,并且避免了错误和其他可能的细微错误。为什么您认为这段代码的性能对于您的应用程序而言比您应用程序的其他应用程序更重要? – mellamokb

+0

构建字符串时,不要将长字符串与两个短字符串连接(强制将长字符串复制两次)。因此,而不是'MyString = MyString&“”&MyArray(i)'使用'MyString = MyString&(“”&MyArray(i))' – brettdj

对于100K阵列

Sub test() 

    Dim aArr(1 To 100000) As String 
    Dim i As Long 
    Dim sString As String 
    Dim snTimer As Single 

    FillArray aArr 

    snTimer = Timer 

    For i = 1 To 100000 
     sString = sString & Space(1) & aArr(i) 
    Next i 

    Debug.Print Timer - snTimer 
    snTimer = Timer 

    sString = Join(aArr, Space(1)) 

    Debug.Print Timer - snTimer 

End Sub 

加入是明显的赢家

2.050781 
0 

的原因是,每次你&记忆串连时间要重新分配,以适应新的数组(无论如何都是字符串)。使用Join,您只需将一个数组(源数组)复制到另一个数组(字符串),并且VBA已知道大小。

如果要高效地组合多个字符串,可以定义一个stringbuilder类。

运行下面的代码构建一串数字高达一百万只需要几分之一秒(0.3秒)。建立一个数组并使用Join需要的时间相差不多(0.25s),对Join函数的调用只需要大约10%的时间。

如果字符串已经在一个数组中,那么使用Join是有意义的,但是对于少量的字符串,差异不太可能是明显的。

Sub JoinStringTest() 

Dim i As Long, t As Double 
Dim sb As New StringBuilder 
Dim sbRet As String 
Dim joinRet As String 

t = Timer 
For i = 1 To 1000000 
    sb.Append CStr(i) 
Next 
sbRet = sb.Text 
Debug.Print "SB", Timer - t 

t = Timer 
Dim a(1000000) As String 
For i = 1 To 1000000 
    a(i) = CStr(i) 
Next i 
joinRet = Join(a, "") 
Debug.Print "Join", Timer - t 

Debug.Print sbRet = joinRet 

End Sub