2004年09月13日

StringBuilder

   このエントリーをはてなブックマークに追加 Clip to Evernote
<<メルマブログからの移動記事 2004.08.20>>

Cマガジン9月号の「επιστημηのオブジェクト工房」に、 「個の星(*)を返すようなstars(n);を定義する」というような話題が載っていました。 これをC#で書くと、
string stars(int n) {
    return new string('*',n);
}
となります。でも、プログラミングの勉強としては、これだと面白くありません。 では、次のコードはどうでしょうか。

    static string stars(int n) {
        string s = "";
        for ( int i = 0; i < n; i++ )
            s += '*';
        return s;
    }
C#の初心者としては、これで良いと思います。
ただ、 内部の動作を考えると、s+= '*'; のところで、インスタンスの生成と複写処理が頻発するため、見た目とは裏腹に効率の悪いプログラムとなっています。
.NETでは、このようなときのために、StringBuilderクラスが用意されています。このクラスを使えば、

    static string stars(int n) {
        StringBuilder sb = new StringBuilder(n);
        sb.Length = n;
        for ( int i = 0; i < n; i++ )
            sb[i] = '*';
        return sb.ToString();
    }
と書けます。 もちろん、実務では最初のコードで良いのですが、プログラミングの学習では、別の方法で書いて見るのも良い勉強になりますね。
ちなみに、 StringBuilderを使い、僕が最初に書いたコードを以下に示します、上のコードとの違いに注目してください。

    static string stars(int n) {
        StringBuilder sb = new StringBuilder();
        for ( int i = 0; i < n; i++ )
            sb.Append('*');
        return sb.ToString();
    }


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/6788888