1. ホーム
  2. c#

[解決済み】文字列の中にある文字列(実際はchar)の出現回数を数えるには?

2022-03-23 23:34:55

質問

今、あることをやっていて、その中で、「何個あるのか」を数えたいことに気がつきました。 / そして、それを行うにはいくつかの方法があることに気づきましたが、最も良い(または最も簡単な)方法を決めることができませんでした。

今のところ、こんな感じにしています。

string source = "/once/upon/a/time/";
int count = source.Length - source.Replace("/", "").Length;

でも、全然好きじゃないんだ、誰か買ってくれる人いないかな?

あまり掘り起こしたくはないのですが RegEx このためでしょうか?

私の文字列には、私が検索している用語が入ることが分かっているので、それを想定してください...

もちろん文字列の場合 ここで 長さ > 1 ,

string haystack = "/once/upon/a/time";
string needle = "/";
int needleCount = ( haystack.Length - haystack.Replace(needle,"").Length ) / needle.Length;

解決方法は?

.NET 3.5を使用している場合、LINQを使用してワンライナーでこれを行うことができます。

int count = source.Count(f => f == '/');

LINQを使いたくなければ、これでできる。

int count = source.Split('/').Length - 1;


驚くかもしれませんが、あなたのオリジナルのテクニックは、これらのどちらよりも約30%速いようです! 私はちょうど "/once/upon/a/time/" で簡単なベンチマークを行ったところ、以下のような結果が得られました。

<ブロッククオート

あなたのオリジナル=12秒

ソース.Count = 19s

ソース.スプリット = 17s

bobwienholtの回答より ) = 10s

(時間は50,000,000回繰り返した場合のものなので、実世界で大きな違いを感じることはないでしょう)。