Schnellste Weg, um zählt die Anzahl der Großbuchstaben in c#
Irgendwelche Gedanken über die Effizienz dieser? ...
CommentText.ToCharArray().Where(c => c >= 'A' && c <= 'Z').Count()
InformationsquelleAutor peterorum | 2009-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, nur geschlagen, bis einige code mal Eure Methode gegen:
Das Ergebnis:
Ziemlich grosser Unterschied! Manchmal sind die straight-forward Weg ist am effizientesten.
Bearbeiten
Nur aus Interesse, ist diese:
Kommt auf rund 2500 Zecken. Also für eine "Linqy" one-liner es ist ziemlich schnell.
D ' Oh! Konnte bei der post, fast genau die gleiche Lösung. Gut gemacht Matt, verdammt blöde langsame Finger . . .
By the way, +1 mate, du hast es 🙂
Seien Sie gewarnt, aber, dass die Tests für die (c => c >= 'A' && c <= 'Z') ist nicht das gleiche wie (- c => Char.IsUpper(c))
Ist.Count(char.IsUpper) das gleiche timing wie s.Count(c => char.IsUpper(c)) ?
InformationsquelleAutor Matt Hamilton
Zunächst gibt es keinen Grund, warum Sie benötigen, rufen Sie
ToCharArray()
da, vorausgesetztCommentText
ist ein string, ist es schon einIEnumerable<char>
. Zweitens sollten Sie wohl anrufenchar.IsUpper
anstatt anzunehmen, Sie sind nur den Umgang mit ASCII-Werten. Der code sollte eigentlich so Aussehen,Dritten, wenn Sie besorgt über die Geschwindigkeit gibt es nicht viel, dass kann schlagen die alten for-Schleife,
Im Allgemeinen wird der Aufruf jeder Methode wird langsamer sein als inlining den code aber diese Art der Optimierung sollte nur durchgeführt werden, wenn Sie absolut sicher sind, dass dies der Flaschenhals in deinem code.
Doh, ja. Behoben.
Danke für deine Antwort. Sehr prägnante linq-code.
InformationsquelleAutor chuckj
Du bist nur zählen standard-ASCII-und nicht ÃÐÊ etc.
Wie etwa
Nicht vergessen: es zählt die Anzahl der Großbuchstaben unabhängig von der Anzahl der Wörter.
InformationsquelleAutor Dead account
Sogar ohne testen würde ich sagen
ist schneller, Sie jetzt zu testen.
Nicht die Mühe, es zu testen, wie Matt Hamilton war rücksichtsvoll genug, dies zu tun für mich 🙂
InformationsquelleAutor Binary Worrier
Was Sie tun mit diesem code ist um eine Sammlung zu erstellen mit den Charakteren, eine neue Sammlung erstellen, die nur die Großbuchstaben, dann in einer Schleife durch die Auflistung nur um herauszufinden, wie viele es sind.
Diese besser (aber noch nicht ganz so gut wie ein normaler loop), als es nicht erstellen Sie die intermediate Sammlungen:
Edit: Entfernt die ToCharArray call auch, wie Matt vorgeschlagen.
Guter Punkt. Ich habe etwas ähnliches vor und dann die ToCharArray nötig war, aber in diesem Fall nicht. 🙂
InformationsquelleAutor Guffa
Habe ich dieses
aber ich weiß nicht, ob es besonders schnell. Es wird nicht von speziellen Zeichen entweder, ich s'poseEDIT:
Schnellen Vergleich auf diese Frage die Antwort. Debug in vshost, 10'000 Iterationen, die mit der Zeichenfolge:
aBcDeFGHi1287jKK6437628asghwHllmtbynera
Sie können mash diese in einer Zeile:
Regex.Matches(s, "[A-Z]{1}", RegexOptions.Compiled | RegexOptions.CultureInvariant).Count;
InformationsquelleAutor flq