Cómo repetir caracteres correctamente en C#: del código ingenuo a la optimización

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué la pregunta sobre repetir un carácter se ha vuelto icónica

\n\n

Si alguna vez has programado en C#, seguramente te has enfrentado a la tarea: «Necesito crear una cadena que consista en N caracteres iguales». Parece sencillo, ¿verdad? Pero precisamente esta pregunta en Stack Overflow ha acumulado miles de visitas y decenas de respuestas. ¿Por qué? Porque detrás de la aparente simplicidad se esconde todo un mundo de optimización del rendimiento y trampas ocultas.

\n\n

En este artículo no solo mostraremos cómo repetir un carácter en C#. Recorreremos el camino desde la solución ingenua hasta las técnicas profesionales que se utilizan en sistemas de alta carga. Aprenderás qué método es el más adecuado para repetir un carácter en diferentes escenarios y por qué algunos consejos populares son en realidad perjudiciales.

\n\n

¿Para quién será útil este artículo?

\n
    \n
  • Desarrolladores principiantes de C# que quieren escribir código no solo funcional, sino eficiente
  • \n
  • Programadores experimentados que buscan formas de optimizar operaciones con cadenas
  • \n
  • Todos aquellos que se preparan para entrevistas técnicas y quieren destacar por su conocimiento del funcionamiento interno de .NET
  • \n
\n\n

El problema: Por qué no deberías usar un bucle for

\n\n

Cuando un principiante escucha «repetir un carácter N veces», lo primero que se le viene a la mente es un bucle for:

\n\n
string RepeatChar(char c, int count)\n{\n    string result = "";\n    for (int i = 0; i < count; i++)\n        result += c;\n    return result;\n}\n
\n\n

Esta solución funciona, pero es catastróficamente lenta. ¿Por qué? Porque las cadenas en C# son inmutables. Cada operación += crea una nueva cadena, copiando el contenido anterior más un carácter. Como resultado, la complejidad de este algoritmo es O(n²). Para 10 caracteres es imperceptible, pero para 100 000 es una eternidad.

\n\n

Veamos cifras reales. Probemos este método con count = 100 000. En un procesador moderno, esto tomará… varios segundos. ¿Y si necesitas repetir el carácter un millón de veces? El programa simplemente se «congelará».

\n\n

Conclusión: el bucle con concatenación es malo. Pero existen otros enfoques más eficientes.

\n\n

Formas principales de repetir un carácter en C#

\n\n

Analicemos todos los métodos populares que se discuten en Stack Overflow y en proyectos reales. Probaremos el rendimiento de cada uno y veremos cuándo usar cada uno.

\n\n

1. StringBuilder clásico

\n\n

El primer paso hacia la optimización es usar StringBuilder. No crea una nueva cadena en cada adición, sino que trabaja con un búfer:

\n\n
string RepeatWithStringBuilder(char c, int count)\n{\n    StringBuilder sb = new StringBuilder(count);\n    for (int i = 0; i < count; i++)\n        sb.Append(c);\n    return sb.ToString();\n}\n
\n\n

Observa: hemos establecido inmediatamente la capacidad inicial count. ¡Esto es importante! Si no se especifica la capacidad, StringBuilder se verá obligado a reasignar memoria varias veces, lo que reducirá el rendimiento.

\n\n

Rendimiento: O(n). Para 100 000 caracteres, este método se ejecuta en ~1-2 ms.

\n\n

2. Array de caracteres + new string

\n\n

¡Y esta es una de las formas más rápidas en .NET! Creamos un array de la longitud deseada, lo llenamos con el carácter y lo pasamos al constructor de la cadena:

\n\n
string RepeatWithArray(char c, int count)\n{\n    char[] chars = new char[count];\n    Array.Fill(chars, c);\n    return new string(chars);\n}\n
\n\n

¿Por qué es rápido? Porque trabajamos directamente con la memoria: el array se llena en una sola pasada, y el constructor new string(char[]) simplemente copia los datos al búfer interno de la cadena. Sin operaciones adicionales.

\n\n

Rendimiento:

Blogs

Book Recommendations