VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -