2012-07-29 9 views
5

Ich habe eine Zeichenfolge, und ich möchte überprüfen, ob es mit einem bestimmten Zeichen beginnt (# in diesem Fall). Ich würde gerne wissen, wie das am effizientesten ist!Was ist die effizienteste Art zu prüfen, ob ein String in TCL mit einem bestimmten Zeichen beginnt?

Was ich denke, ist if {[string compare -length 1 $string "#"]}, weil es strcmp() verwenden könnte, die wahrscheinlich eine der schnellsten Möglichkeiten, dies zu erreichen ist.

Was ich denke, könnte auch möglich sein if {[string index $string 1] == "#"}, weil es * string == '#' tun könnte, die wahrscheinlich auch sehr schnell sein wird.

Was denkst du?

+1

Während 'string compare -length' am Ende das Äquivalent von' strncmp() 'verwendet, muss es vorsichtiger sein, als Sie sich vielleicht vorstellen, weil Tcl Unicode-Zeichen und nicht ASCII verwendet _and_ NUL ist ein zulässiges Zeichen in einem Tcl Zeichenfolge. –

Antwort

12

Die schnellste Methode der Überprüfung, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt, ist string match:

if {[string match "#*" $string]} { ... } 

Der Code der Anpassung zu tun sieht, dass ein Stern nach dem ersten Zeichen gibt es und dann das Ende der Schnur, und so hört auf, den Rest von $string zu untersuchen. Es erfordert auch keine Zuweisung eines Ergebnisses (außer einem booleschen, was ein Spezialfall ist, da string match auch bytecode-kompiliert ist).

+0

Während "string match" die intuitivste Sache war, die ich mir vorstellen konnte, ist es interessant zu lernen, dass es auch effizient ist. Ich hätte gedacht, dass es weniger performant wäre, weil es alle Arten von Wildcards analysieren muss. Nun, ich benutze jetzt 'string match', danke! – Jerry

+0

@Jerry: Der "Wildcard am Ende" ist ein Sonderfall im Matcher-Code. –

0

Ja [string match "*" $ string_name] das hat bei mir funktioniert. Dies ist sehr schnell im Vergleich zu Regexp oder einem anderen Dienstprogramm.

Verwandte Themen