[C#] C #에서 문자를 반복하는 가장 좋은 방법

\tC #에서 의 문자열을 생성하는 가장 좋은 방법은 무엇입니까?

나는 C #을 배우고 같은 말을하는 다른 방법으로 실험하고 있습니다.

Tabs(uint t)함수입니다 리턴 stringt\t

예를 들어 Tabs(3)반환"\t\t\t"

이 세 가지 구현 방법 중 Tabs(uint numTabs)가장 좋은 방법은 무엇입니까?

물론 그것은 “최고”의 의미에 달려 있습니다.

  1. LINQ 버전은 두 줄 밖에 안됩니다. 그러나 반복 및 집계에 대한 호출이 불필요하게 시간 / 자원을 소비합니까?

  2. StringBuilder버전은 매우 분명하다하지만입니다 StringBuilder클래스는 어떻게 든 느린?

  3. string버전은 기본 버전이므로 이해하기 쉽습니다.

  4. 전혀 중요하지 않습니까? 그들은 모두 평등합니까?

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;
}



답변

이건 어때?

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

n문자열을 반복하려는 횟수는 어디 입니까?

또는 더 나은 :

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


답변

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

보고

“아밥”

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

보고

“aa”

에서…

.net에서 문자열 또는 문자를 반복하는 내장 함수가 있습니까?


답변

모든 버전의 .NET에서 문자열을 반복 할 수 있습니다.

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

캐릭터를 반복하는 new String('\t', count)것이 가장 좋습니다. @CMS의 답변을 참조하십시오 .


답변

가장 좋은 버전은 확실히 내장 방식을 사용하는 것입니다.

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

다른 솔루션 중에서 가장 쉬운 방법을 선호하십시오. 이것이 너무 느리게 입증되는 경우에만보다 효율적인 솔루션을 위해 노력하십시오.

a를 사용 StringBuilder하고 결과 길이를 미리 알고 적절한 생성자를 사용하는 경우 시간이 많이 걸리는 할당이 하나만 발생하고 데이터를 불필요하게 복사하지 않기 때문에 훨씬 효율적입니다.
넌센스 : 물론 위의 코드가 더 효율적입니다.


답변

확장 방법 :

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);
}


답변

확장 방법을 사용하는 것은 어떻습니까?


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();
   }
}

그런 다음 쓸 수 있습니다 :

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

문자열 대신 간단한 문자에 대해 stringbuilder 버전을 사용하는 성능 테스트를 수행하면 성능이 크게 저하됩니다. 컴퓨터에서 측정 된 성능의 차이는 다음과 같이 1:20입니다. Debug.WriteLine ( ‘-‘. Repeat (1000000)) // char 버전 및
Debug.WriteLine ( “-“. Repeat (1000000)) // 문자열 버전


답변

이건 어때요:

//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));