できるだけ早く作業する効率的なコードを書く必要があるプロジェクトがありますが、知識が不足していますので...より効率的な方法で並べ替えを書くには?
私はasp.net(MVC)を持っています。エンティティフレームワークを使用してプロジェクトを作成し、同様にWebサービスを使用して詳細情報を取得する必要があります。 まず、Webサービスへのリクエストを行い、長い文字列で応答します。これは、後続の動作のために文字列のリストを解析する必要があります。
私はこのように、この文字列を解析:
:私は情報とこのようになりジャンク行の多くを持つ行の多くのリストを、持ってここからstring resultString;
char[] delimiterChars = { ',', ':', '"', '}', '{' };
List<string> words = resultString.Split(delimiterChars).ToList();
私はこのリストを迷惑情報から削除することにしました。さらなる方法でそれを扱い、ifsなどでこの行をチェックしないようにしました:
for (int i = words.Count - 1; i >= 0; i--)
{
if (words[i] == "" || words[i] == "data" || words[i] == "array") words.RemoveAt(i);
}
これ以降、明確なリストが得られましたが、価格、サイズなどの10進数は,
で区切られていますので、私のリストに21,55の価格があれば、21と55の2つの要素のように見えます。区切り文字から,
を削除するだけです。なぜなら、Webサービスからの応答として文字列が得られるのは、主に、,
を入れて情報を区切るからです。
だから私は(このブロックリストの要素はのように見えた前に:1)バック小数を接着することを決めATTRVALUE 2)21 3)55などの後:1)ATTRVALUE 2)21.55):
for (int i = 0; i < words.Count(); i++)
{
if (words[i] == "attrValue")
{
try
{
var seconPartInt = Int32.Parse(words[i + 2]);
words[i + 1] += "." + words[i + 2];
}
catch { }
}
if (words[i].Contains("\\/")) words[i].Replace("\\/", "/");
}
すべて事は大丈夫です、リストはソートされ、小数は集まりますが、速度は30%遅くなります。ストップウォッチとコードブロックのいくつかのテストの後、上のコードがプログラム全体を遅くすることが明らかになりました。それをより速く動作させる方法。問題は、文字列をintに変換して、リスト内の次の要素が自分の番号であれば2番目の要素かどうかをチェックすることです。
コードを最適化するにはどうすればよいですか?
ウェブサービスからCSVファイルを取得しているようです。ファイルが毎回同じであるかどうか知っていますか?もしそうなら、私はCSVパーサでリターンをシリアライズすることについて考えます。それは私の意見でオブジェクトとして管理しやすくなり、デフォルトでは不要なものを無視するように選択することができます。 –
なぜあなたは文字列で作業していますか?文字列を解析してオブジェクトに変換したり、オブジェクトに対して作業を行うことができます。 – BWA
'String.Split'を使い続ければ、空の文字列を取り除く簡単な方法は、' StringSplitOptions'パラメータを取るバージョンを使うことです。 'StringSplitOptions.RemoveEmptyEntries'オプションを使うべきです。 – hatchet