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

  • eisleyhead

    eisleyhead

    11 Ocak 2006
  • LevelUpTuts

    LevelUpTuts

    20 Ocak 2012
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008