J'écris une fente de chaîne personnalisée. Il se divise sur un point (.
) qui n'est pas précédé d'un nombre impair de barres obliques inverses (\
).fractionnement de chaîne personnalisé rapide
«string» -> «IEnemerable<string>»
"hello.world" -> "hello", "world"
"abc\.123" -> "abc\.123"
"aoeui\\.dhtns" -> "aoeui\\","dhtns"
Je voudrais savoir s'il y a une sous-chaîne qui réutiliser la chaîne d'origine (pour la vitesse), ou est-il une division existante qui peut le faire rapidement?
C'est ce que j'ai, mais est 2-3 fois plus lent que input.Split('.')
// où l'entrée est une chaîne. (Je sais qu'il est un (problème un peu plus complexe, mais pas beaucoup)
public IEnumerable<string> HandMadeSplit(string input)
{
var Result = new LinkedList<string>();
var word = new StringBuilder();
foreach (var ch in input)
{
if (ch == '.')
{
Result.AddLast(word.ToString());
word.Length = 0;
}
else
{
word.Append(ch);
}
}
Result.AddLast(word.ToString());
return Result;
}
Il utilise maintenant la liste au lieu de LinkedList, et commencer enregistrement et à la fin de la sous-chaîne et utiliser String.substring pour créer la nouveaux sous-chaînes. Cela fait beaucoup et est presque aussi rapide que string.split mais je l'ai ajouté mes ajustements. (ajoutera code)
"s'il existe une sous-chaîne qui réutilisera la chaîne d'origine (pour la vitesse)" - vous ne pouvez pas vraiment l'implémenter si ce n'est pas le comportement de .NET. – millimoose
allez-vous jamais entrer dans le cas: 'aeiou \ .bcde \\. Opz'? ou n'en auras-tu qu'un seul? dans ta chaîne? – Jastill
plusieurs points (séparateurs), et parfois des points d'échappement \. (non séparateurs). Parfois \\ aussi bien. –