Nasıl bir dize içinde bir dize tekrarı sayar mısın? | Netgez.com
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

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • calicoJake

    calicoJake

    29 EKİM 2007