12
votes

Mise en œuvre publique des cordes en C #?

Y a-t-il une mise en œuvre du public du structure de données de la corde en C #? < / p>


3 commentaires

Si vous avez un scénario où cette structure de données est plus optimale qu'un constructeur à cordes, je serais curieux de savoir ce que c'est. Mon expérience a été mon expérience que les structures de données de câble ne sont presque jamais une victoire sur la vitesse brute des opérations de chaîne native ou de génératrice de cordes dans des cas typiques, alors je suis très intéressé à voir des scénarios réalistes où sa victoire.


Je suis tellement curieux que vous êtes ... c'est pourquoi il y a une autre question!


Pour une tâche, je veux commencer à partir d'une chaîne vide puis insérez un caractère au milieu d'une chaîne pour des millions de fois. Une chaîne ne sera pas efficace dans ce cas. La corde peut ne pas être juste dans sa forme d'origine, mais nous pouvons l'adapter à mon application particulière.


4 Réponses :


14
votes

Je ne suis pas au courant d'une mise en œuvre de la corde (bien qu'il n'y en a probablement pas!), mais si vous êtes seulement après la concaténation, stringbuilder fera le travail.


3 commentaires

Très vrai ici. J'ai effectué une implémentation en C # il y a un moment où j'ai utilisé une "liste liée" des tableaux de caractère et quoi que ce soit, il ne pouvait pas battre la classe StressBuilder. Le problème vient lorsque vous essayez de lier celles-ci pour la concaténation, vous n'avez pas accès à quelques méthodes natives que la classe StressBuilder a accès à l'affectation de la mémoire tampon et de copier les caractères.


@esac - Pourriez-vous publier votre implémentation C # (espérons-le sous une licence de type LGPL / BSD)? Peut-être pourrions-nous enquêter sur certaines stratégies supplémentaires pour perf.


@Torial: Malheureusement, je n'ai plus cela. Je l'ai fait pour le prototypage lorsque j'étais sur l'équipe Windows chez Microsoft, alors même si je l'avais, je ne pouvais pas la partager, désolé!



15
votes

Pour quelle valeur sa valeur, Voici une implémentation de Java immuable . Vous pouvez probablement le convertir en C # en moins d'une heure.


3 commentaires

Heh, c'est une référence dans l'article Wikipedia l'affiche liée à! :)


@Vinko: J'aime l'ironie. Attendez ... est cette ironie? Je ne sais plus plus.


BTW, si vous recherchez une mise en œuvre de la corde publique, avez-vous converti celui-ci? Et si, l'avez-vous fait public? Je préférerais le trouver étrange sinon ...



2
votes

Le BigList code> de la classe des collections d'alimentation Wintellect (une bibliothèque de structures de données C #) est une manière similaire à la corde: http://docs.pushttechnology.com/docs/4.5 .7 / dotnet / externeClient / html / class_wintellect_1_1_power_collections_1_1_big_1_4.01_t_01_4.html

J'ai mesuré ses performances et il fonctionne assez bien dans "Début des inserts de chaîne": p>

Install-Package XAct.Wintellect.PowerCollections


0 commentaires

1
votes

ici est une mise en œuvre du public de cordes en C #, sur la base de la mise en œuvre de Java immuable énumérée ci-dessus. Notez que vous n'obtiendrez pas les mêmes avantages du polymorphisme que la version Java, car les cordes ne peuvent pas être héritées et que la Chaluquant n'existe pas de manière native en C #.


0 commentaires