1

テキスト ファイルを読み取り、このテキスト ファイルに基づいて出力を作成する小さなプログラムを作成しました。

テキスト ファイルの例は次のようになります。

f
a b c
d e

私のプログラムが次に行うことは、次のような行と、各行の単語のすべての組み合わせ/順列を表示する新しいテキスト ファイルを作成することです。

f
a b c 
a c b
b a c
b c a
c b a
c a b
a b
a c
b a
b c
c a
c b
a
b
c
d e
e d
e
d

現在、この機能は適切に機能していますが、読みやすさを向上させるために、各エントリの組み合わせ/順列の前に「 ~ 」を付けることを除いて、同じものを出力するセカンダリ テキスト ファイルを作成することにしました。

現在、私はこの2つの出力文字列を持っているので、次のように言いましょう:

string outputStringNormal = "";
string outputStringReadable = "";

次に、私のコードでは、基本的に各出力文字列にテキストを追加します。

outputStringNormal += someText;
outputStringReadable += " ~ " + someText;

出力文字列を 1 つだけにして、[randomMarker] を各組み合わせ/順列の先頭に追加し、新しいテキスト ファイルを出力する直前に、通常のファイルに追加した方が効率的かどうか疑問に思っていました。 string マーカーを "" に置き換えてから、Readable で " ~ " に置き換えます。

このように:

outputString += "[randomMarker]" + someText;

そして、出力の直前:

CreateSomeFile(outputString.Replace("[randomMarker]", "");
CreateSomeFile(outputString.Replace("[randomMarker]", " ~ ");
4

4 に答える 4

3

テキストファイル全体をメモリに保存するべきではありません。その行を生成するときに、各行をファイルに書き出すだけです。このような組み合わせ論を扱う場合、非常に大きな値を取得するのは非常に簡単になるため、必要のない大量の情報をメモリに格納することは避けてください。

行の文字列を生成し、その行を人間以外のファイルに書き込んで~から、人間が読めるファイルにを追加して、同じ行を追加する必要があります。これを行うと、文字列の連結や置換などを行うことさえありません。継続的に出力ストリームに書き込むだけです。

于 2012-07-11T15:09:07.030 に答える
1

コメントからの移植:

StringBuilderこの場合、次の代わりに:を使用できます。

+=オペレーター;

String.Concat()方法;

String.Format()方法。

実際、String.Format()メソッドはStringBuilder内部でクラスを使用していますが.AppendFormat()、フォーマットする必要がない場合は、 ..Append()AppendFormat()

また、なぜ new text file( streamwriter.Write()) ではなく変数に格納するのですか?

于 2012-07-11T15:24:09.093 に答える
0

ファイルへの書き込みがボトルネックになる可能性があります。したがって、バッファリングされた出力を実行し、出力をできるだけ少なくフラッシュするようにしてください。

于 2012-07-11T15:08:09.217 に答える
0

You become more performance with outputStringNormal = string.Format({0} SomeText, outputStringNormal) In C# string.Format is most effective way to concat strings. You shouldnt use string += string.

于 2012-07-11T15:01:01.140 に答える