2 Stimmen

string.format Effizienz mit bedingten Abständen

Was ist der absolut schnellste Weg, um einen vollständigen Namen zu formatieren, bei dem der mittlere Name und das Suffix null oder leer sein können?

string fullname = string.Format("{0} {1} {2} {3}", 
                                FName, 
                                MI, 
                                LName, 
                                Suffix);

Das Problem dabei ist, dass ich zwei Leerzeichen habe, wenn das MI oder Suffix leer ist.

Ich könnte damit einen zweiten Durchgang machen:

fullname = fullname.Replace("  ", " ");

oder ich könnte die Zeichenfolge einfach mit etwas wie diesem erstellen:

string fullname = string.Format("{0}{1} {2}{3}", 
                        FName, 
                        string.IsNullOrEmpty(MI) ? "" : " " + MI, 
                        LName, 
                        string.IsNullOrEmpty(Suffix) ? "" : " " + Suffix);

Gibt es eine bessere Lösung? Schnellste ist das Wichtigste.

5 Stimmen

Wenn man es nicht millionenfach macht, sollte die Geschwindigkeit kein Problem sein. ich würde mir keine Sorgen über die Geschwindigkeit machen, wenn es nur wenige Anrufe gibt.

4 Stimmen

string fullname = string.Join(" ", new[]{FName, MI, LName, Suffix}.Where(i => !string.IsNullOrEmpty(i)));

0 Stimmen

Nicht ganz eine Million, aber doch eine Menge. Ich werde das .Join auf jeden Fall zu einem anderen Zeitpunkt ausprobieren. Sieht gut aus

4voto

LukeH Punkte 251752

Ich würde dies tun:

var parts = new[] { FName, MI, LName, Suffix };
string fullName = string.Join(" ", parts.Where(s => !string.IsNullOrWhiteSpace(s)));

Es ist wahrscheinlich nicht die schnellste Lösung, aber sie macht ziemlich deutlich, was vor sich geht.

0 Stimmen

Das ist ziemlich raffiniert, nicht das, was ich dieses Mal verwenden würde, aber etwas, das sich in Zukunft sehr lohnen könnte.

0 Stimmen

So würde ich es machen. Es ist wahrscheinlich nicht der schnellste Ansatz, aber er verarbeitet immer noch mehrere Millionen Namen pro Sekunde.

1voto

CodesInChaos Punkte 103089

Prüfen Sie zuerst auf Null oder Leer und schreiben Sie dann speziellen Code für jeden dieser Einträge. Ich würde erwarten, dass man direkt an einer char[] Puffer schneller zu sein als string.Format oder StringBuilder.

Aber ich finde es seltsam, dass die Formatierung von Namen ein Leistungsengpass in Ihrer Anwendung ist. Selbst die Formatierung von ein paar Millionen Namen sollte nicht so lange dauern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X