SORU
12 ŞUBAT 2009, PERŞEMBE


Nasıl bir dize içinde bir dize tekrarı sayar mısın?

Bir şey yapıyorum burada anladım ki istediğim kadar say kaç /s bulabildigim bir dize, ve sonra da onu vurdu beni, orada birçok yolu bunu yapmak için, ama olmadı karar üzerinde ne kadar iyi (ya da kolay).

Şu anda bir şey gibi gidiyorum:

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

Ama ben hiç sevmedim, başka var mı?

Bunun için Düzenli deşmek istemiyorum, değil mi?

Benim dize arıyorum vadeli olacak biliyorum varsayabiliriz

Uzunluğu ^ nerede dizeler için tabii ki . 1,

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

CEVAP
12 ŞUBAT 2009, PERŞEMBE


Kullanıyorsanız .NET 3.5 SERİ ile oyunu bir bunu yapabilirsiniz:

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

Eğer SERİ kullanmak istemiyorsanız eğer doğru değilse bunu yapabilirsiniz:

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

Orijinal tekniğin bu da 0'dan daha hızlı gibi görünüyor olduğunu öğrenmek için sürpriz olabilir! Sadece "/sonra/üzerine//zaman" ve sonuçları aşağıdaki gibidir:./ hızlı bir karşılaştırma yaptım

= 12s orijinal
kaynak.= 19s Kont
kaynak.= 17 böl
foreach (from bobwienholt's answer) = 10

(Bu kez gerçek dünyada çok fazla bir fark olası konum çok 50,000,000 yineleme için.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • tinycammonitor

    tinycammonit

    14 Aralık 2010
  • TomKNJ

    TomKNJ

    26 ŞUBAT 2007
  • Tube Time

    Tube Time

    14 Mayıs 2013