投稿日 | : 2004/06/11(Fri) 20:38 |
投稿者 | : Say |
Eメール | : |
URL | : |
タイトル | : Re^2: 文字列連結の高速化 |
> 何かすごい方法とか無いんですかね?
「常套手段」というやつは、それなりに試した結果
常套手段になっているわけですから・・・。
すごくはないけど、VBにしてはちょっとひねたやり方をひとつ・・・
Cならポインタ使って、もうちょっとましな書き方ができますが。
(あんまり吟味してないんで、バグってるかも。
再帰にすればコードは簡単になりますが、処理は遅くなるでしょう。)
Private Function func()
Dim i1 As Long
Dim i2 As Long
Dim i3 As Long
Dim i4 As Long
Dim i5 As Long
Dim i6 As Long
Dim j As Long
Dim tmp(100000 * 6& * 4) As Byte
For i1 = 0& To 9&
tmp(i1 * 2&) = 48 + i1
Next
For i1 = 1& To 9&
For i2 = 0& To 9
j = (i1 * 10& + i2) * 4& - 20&
tmp(j) = 48& + i1
tmp(j + 2&) = 48& + i2
Next
Next
For i1 = 1& To 9&
For i2 = 0& To 9&
For i3 = 0& To 9&
j = (i1 * 100& + i2 * 10& + i3) * 6& - 220&
tmp(j) = 48& + i1
tmp(j + 2&) = 48& + i2
tmp(j + 4&) = 48& + i3
Next
Next
Next
For i1 = 1& To 9&
For i2 = 0& To 9&
For i3 = 0& To 9&
For i4 = 0& To 9&
j = (i1 * 1000& + i2 * 100& + i3 * 10& + i4) * 8& - 2220&
tmp(j) = 48& + i1
tmp(j + 2&) = 48& + i2
tmp(j + 4&) = 48& + i3
tmp(j + 6&) = 48& + i4
Next
Next
Next
Next
For i1 = 1& To 9&
For i2 = 0& To 9&
For i3 = 0& To 9&
For i4 = 0& To 9&
For i5 = 0& To 9&
j = (i1 * 10000& + i2 * 1000& + i3 * 100& + i4 * 10& + i5) * 10& - 22220&
tmp(j) = 48& + i1
tmp(j + 2&) = 48& + i2
tmp(j + 4&) = 48& + i3
tmp(j + 6&) = 48& + i4
tmp(j + 8&) = 48& + i5
Next
Next
Next
Next
Next
j = j + 10&
tmp(j) = 49
tmp(j + 2&) = 48
tmp(j + 4&) = 48
tmp(j + 6&) = 48
tmp(j + 8&) = 48
tmp(j + 10&) = 48
func = tmp()
End Function