ASP.NET文字列から文字出現回数を検索する具体的な実装方法
1689 ワード
まず最初に考えられる方法は、文字列を最初から巡回して統計することです.
2つ目の方法は、文字列の検索するすべての文字を除去し、前後の文字列の長さを比較して除去すればよいことも容易に考えられます.この方法は誰かに軽蔑され、性能が悪く空間を多く占めているという.
次に、ある人が3つ目の方法を提案したのは、検索する文字を区切り文字とし、元の文字列を複数のサブ列に区切り、サブ列の数を求めることです.C#では短く書く方法です.
原理から3つの性能の順序を推定することができるが,いったい差がどれだけあるのか,やはり実験に着手しなければならない.これは非常に古典的なテストコードです.
まず、正確性を確保し、テストされた3つの方法は、最初の最後、連続的な出現、出現しない、または列の長さが0など、多くの状況を正しく処理することができます.私が取った文字列は普通の列です.Release版にコンパイルし、10回前に実行した結果、以下の結果が得られました.
遍歴統計:13ミリ秒置換後の比較長:112ミリ秒文字列解除後のカウント:233ミリ秒
ここではすでに違いが現れており、遍歴統計は置換後より10倍速く、文字列を切断するのは遅い.次に、次の2つのテストを行いました.
1、文字列の長さを変更せず、検索する文字列の数を増やしたり減らしたりします.2、検索する文字の出現頻度は変更しないが、文字列の長さを増やす.
その結果,3つの方法はいずれも文字列長の増加に伴って線形に遅くなり,その後,2つの方法は検索する文字の増加に伴って遅くなることが分かった.
文字列を切断する方法は、文字列の分布を検索する場合にも影響します.
Replace関数とSplit関数の実装を研究することで,この問題を徹底的に解決できる.しかし、私は細かく研究する気持ちがありません.私はやはり2つ目の方法を選ぶことにしました.置き換えて長さを比較することにしました.その速度は第1の方法より遅いが,長さが1でないサブストリングの出現回数を求める方法に書き換えやすい.1つ目の方法は、長さが1より大きい文字列を求めるには多くの要素を考慮しなければならない(必ずしも本当に面倒ではないが)、私は考えるのがおっくうで、ほほほ.
c1=0;
for(inti=0;i {
if(str[i]=='A')
{
c1++;
}
}
2つ目の方法は、文字列の検索するすべての文字を除去し、前後の文字列の長さを比較して除去すればよいことも容易に考えられます.この方法は誰かに軽蔑され、性能が悪く空間を多く占めているという.
c2=str.Length-str.Replace("A",String.Empty).Length;
次に、ある人が3つ目の方法を提案したのは、検索する文字を区切り文字とし、元の文字列を複数のサブ列に区切り、サブ列の数を求めることです.C#では短く書く方法です.
c3=str.Split(newchar[]{'A'}).Length-1;
原理から3つの性能の順序を推定することができるが,いったい差がどれだけあるのか,やはり実験に着手しなければならない.これは非常に古典的なテストコードです.
stringstr="SADTHDGSAFSDGTGHRDGSADFADDRHDFSGASDAA";
Stopwatchsw=newStopwatch();
longt;
intc=0;
GC.Collect();
Application.DoEvents();
sw.Start();
for(inti=0;i<100000;i++)
{
c=
}
sw.Stop();
t=sw.ElapsedMilliseconds;
まず、正確性を確保し、テストされた3つの方法は、最初の最後、連続的な出現、出現しない、または列の長さが0など、多くの状況を正しく処理することができます.私が取った文字列は普通の列です.Release版にコンパイルし、10回前に実行した結果、以下の結果が得られました.
遍歴統計:13ミリ秒置換後の比較長:112ミリ秒文字列解除後のカウント:233ミリ秒
ここではすでに違いが現れており、遍歴統計は置換後より10倍速く、文字列を切断するのは遅い.次に、次の2つのテストを行いました.
1、文字列の長さを変更せず、検索する文字列の数を増やしたり減らしたりします.2、検索する文字の出現頻度は変更しないが、文字列の長さを増やす.
その結果,3つの方法はいずれも文字列長の増加に伴って線形に遅くなり,その後,2つの方法は検索する文字の増加に伴って遅くなることが分かった.
文字列を切断する方法は、文字列の分布を検索する場合にも影響します.
Replace関数とSplit関数の実装を研究することで,この問題を徹底的に解決できる.しかし、私は細かく研究する気持ちがありません.私はやはり2つ目の方法を選ぶことにしました.置き換えて長さを比較することにしました.その速度は第1の方法より遅いが,長さが1でないサブストリングの出現回数を求める方法に書き換えやすい.1つ目の方法は、長さが1より大きい文字列を求めるには多くの要素を考慮しなければならない(必ずしも本当に面倒ではないが)、私は考えるのがおっくうで、ほほほ.