Irgendeine Möglichkeit, diese String-Slice-Methode zu verbessern?

9

Ich habe diese String-Erweiterung eine Weile zurückgeschrieben, und ich bekomme tatsächlich ziemlich viel Nutzen daraus.

%Vor%

Da es jetzt in all meinen Projekten ist, frage ich mich, ob ich es besser hätte machen können. Effizienter oder würde es auf jeden Fall zu unerwarteten Ergebnissen führen?

Scheibe. Es funktioniert wie Pythons Array-Notation.

%Vor%

Viele andere Sprachen haben auch so etwas. string.Slice(1) entspricht string.Substring(1) . string.Substring(1,-1) schneidet das erste und letzte Zeichen ab. string.Substring(null,null,-1) wird die Zeichenfolge umkehren. string.Substring(step:2) gibt eine Zeichenkette mit jedem anderen Zeichen zurück ... ähnlich wie bei JS-Slice , aber mit einem zusätzlichen Argument .

Aufgrund Ihrer Vorschläge erneut überarbeitet:

%Vor%     
mpen 24.11.2010, 19:53
quelle

3 Antworten

2

Wenn Sie viele Testfälle haben, sollte die Erkennung unerwarteter Ergebnisse kein Problem darstellen, wenn Sie mit verschiedenen Implementierungen experimentieren möchten.

Aus einer API-Perspektive würde ich optionale Argumente anstelle von Nullable-Ints betrachten.

>

Aktualisieren

Nachdem ich den Code genau gelesen habe, kann ich sehen, dass das Geben von "start" und "end" einen Wert von null hat, wenn man "step" in Betracht zieht. Daher konnten sie nicht als optionale int-Parameter dargestellt werden sie könnten jedoch immer noch optionale Parameter sein.

Wenn man sich den Code näher ansieht, ist es ein bisschen eine funky API, da die Werte der einzelnen Parameter sich gegenseitig beeinflussen. Mein vorheriger Kommentar spielt darauf an. Sie müssen wirklich die Implementierung kennen, um das auszuarbeiten, im Allgemeinen kein guter API-Aspekt. Und macht möglicherweise eine schwierige Lesbarkeitserfahrung.

Ich kann sehen, wie "step" verwendet werden kann, um eine Zeichenfolge umzukehren, was möglicherweise nützlich ist. Aber wäre eine Reverse-Extension-Methode dafür nicht besser? Viel besser lesbar und weniger von einem mentalen Speedbump.

    
Tim Lloyd 24.11.2010 19:58
quelle
1

Ich kann 3 Dinge sehen, sehr, sehr kleine

ändere das innere if in ternär wie

%Vor%

Ändern Sie möglicherweise (int) int? in int.Value

ändern

%Vor%

in

%Vor%

und die große Frage ist, wenn es tut was es braucht, warum es reparieren?

update, um zu zeigen, wie man es mit LINQ macht, viel langsamer (gibt es eine Möglichkeit, es zu beschleunigen?)

%Vor%     
Fredou 24.11.2010 20:58
quelle
1

Wenn ich Python nach "abcdefghijklmn"[::6] frage, gibt es 'agm' zurück, aber wenn ich Ihre Funktion nach "abcdefghijklmn".Slice(step:6) frage, gibt es "ag" zurück.

Ich würde empfehlen, die falsche length -Berechnung zu entfernen und Ihre Schleife einfach so auszuführen:

%Vor%     
Gabe 25.11.2010 04:45
quelle

Tags und Links