Pregunta La mejor manera de repetir un personaje en C #


Cuál es la mejor manera de generar una cadena de \testá en C #

Estoy aprendiendo C # y experimentando con diferentes maneras de decir lo mismo.

Tabs(uint t) es una función que devuelve un string con t cantidad de \tes

Por ejemplo Tabs(3) devoluciones "\t\t\t"

¿Cuál de estas tres formas de implementación? Tabs(uint numTabs) ¿es mejor?

Por supuesto, eso depende de lo que "mejor" significa.

  1. La versión LINQ es solo dos líneas, lo cual es bueno. Pero, ¿las llamadas a Repeat and Aggregate consumen innecesariamente tiempo / recursos?

  2. los StringBuilder la versión es muy clara, pero es el StringBuilder clase de alguna manera más lenta?

  3. los string la versión es básica, lo que significa que es fácil de entender.

  4. ¿No importa para nada? ¿Son todos iguales?

Todas estas son preguntas para ayudarme a tener una mejor idea de C #.

private string Tabs(uint numTabs)
{
    IEnumerable<string> tabs = Enumerable.Repeat("\t", (int) numTabs);
    return (numTabs > 0) ? tabs.Aggregate((sum, next) => sum + next) : ""; 
}  

private string Tabs(uint numTabs)
{
    StringBuilder sb = new StringBuilder();
    for (uint i = 0; i < numTabs; i++)
        sb.Append("\t");

    return sb.ToString();
}  

private string Tabs(uint numTabs)
{
    string output = "";
    for (uint i = 0; i < numTabs; i++)
    {
        output += '\t';
    }
    return output; 
}

604
2018-01-04 21:56


origen


Respuestas:


¿Qué tal esto?

string tabs = new String('\t', n);

Dónde n es el número de veces que desea repetir la cadena.

O mejor:

static string Tabs(int n)
{
    return new String('\t', n);
}

1181
2018-01-04 22:00



En todas las versiones de .NET, puede repetir una cadena así:

public static string Repeat(string value, int count)
{
    return new StringBuilder(value.Length * count).Insert(0, value, count).ToString();
}

Para repetir un personaje, new String('\t', count) es tu mejor apuesta. Ver la respuesta por @CMS.


104
2018-04-06 10:38



string.Concat(Enumerable.Repeat("ab", 2));

Devoluciones

"abab"

Y

string.Concat(Enumerable.Repeat("a", 2));

Devoluciones

"Automóvil club británico"

de...

¿Hay una función incorporada para repetir cadena o char en .net?


93
2018-03-13 16:16



La mejor versión es sin duda utilizar la forma integrada:

string Tabs(int len) { return new string('\t', len); }

De las otras soluciones, prefiere la más fácil; solo si esto resulta demasiado lento, busque una solución más eficiente.

Si usas un StringBuilder y conocer su longitud resultante por adelantado, luego también usar un constructor apropiado, esto es mucho más eficiente porque significa que solo se lleva a cabo una asignación que requiere mucho tiempo, y no hay copia innecesaria de datos. Tonterías: por supuesto, el código anterior es más eficiente.


55
2018-01-04 22:01



Métodos de extensión:

public static string Repeat(this string s, int n)
{
    return new String(Enumerable.Range(0, n).SelectMany(x => s).ToArray());
}

public static string Repeat(this char c, int n)
{
    return new String(c, n);
}

41
2018-06-22 23:34



¿Qué hay de usar el método de extensión?


public static class StringExtensions
{
   public static string Repeat(this char chatToRepeat, int repeat) {

       return new string(chatToRepeat,repeat);
   }
   public  static string Repeat(this string stringToRepeat,int repeat)
   {
       var builder = new StringBuilder(repeat*stringToRepeat.Length);
       for (int i = 0; i < repeat; i++) {
           builder.Append(stringToRepeat);
       }
       return builder.ToString();
   }
}

Entonces podrías escribir:

Debug.WriteLine('-'.Repeat(100)); // For Chars  
Debug.WriteLine("Hello".Repeat(100)); // For Strings

Tenga en cuenta que una prueba de rendimiento de usar la versión de stringbuilder para caracteres simples en lugar de cadenas le da una gran penalidad de preformación: en mi computadora la diferencia en el rendimiento medido es 1:20 entre: Debug.WriteLine ('-'. Repeat (1000000)) // versión de char y
Debug.WriteLine ("-". Repeat (1000000)) // versión de cadena


38
2018-01-27 12:28



Qué tal esto:

//Repeats a character specified number of times
public static string Repeat(char character,int numberOfIterations)
{
    return "".PadLeft(numberOfIterations, character);
}

//Call the Repeat method
Console.WriteLine(Repeat('\t',40));

20
2018-06-20 13:50



Sé que esta pregunta ya tiene cinco años, pero hay una manera simple de repetir una cadena que incluso funciona en .Net 2.0.

Para repetir una cadena:

string repeated = new String('+', 3).Replace("+", "Hello, ");

Devoluciones

"Hola hola hola, "

Para repetir una cadena como una matriz:

// Two line version.
string repeated = new String('+', 3).Replace("+", "Hello,");
string[] repeatedArray = repeated.Split(',');

// One line version.
string[] repeatedArray = new String('+', 3).Replace("+", "Hello,").Split(',');

Devoluciones

{"Hola hola hola", ""}

Mantenlo simple.


19
2017-12-03 02:42



Digamos que quiere repetir '\ t' n número de veces, puede usar;

String.Empty.PadRight(n,'\t')

16
2017-08-28 10:45



Tu primer ejemplo que usa Enumerable.Repeat:

private string Tabs(uint numTabs)
{
    IEnumerable<string> tabs = Enumerable.Repeat(
                                 "\t", (int) numTabs);
    return (numTabs > 0) ? 
            tabs.Aggregate((sum, next) => sum + next) : ""; 
} 

se puede reescribir de forma más compacta con String.Concat:

private string Tabs(uint numTabs)
{       
    return String.Concat(Enumerable.Repeat("\t", (int) numTabs));
}

15
2018-01-26 02:43