programing

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

muds 2023. 4. 16. 15:56
반응형

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

스트링을 생성하는 가장 좋은 방법은 무엇입니까?\t는 C#에 있습니다.

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

Tabs(uint t)를 반환하는 함수입니다.string와 함께t의 양\t

예를들면Tabs(3)돌아온다"\t\t\t"

다음 3가지 구현 방법 중 어느 것이Tabs(uint numTabs)최선이요?

물론 그것은 "최고"가 무엇을 의미하느냐에 달려있다.

  1. LINQ 버전은 2줄로 되어 있어 좋습니다.그러나 Repeat 및 Aggregate 호출에 불필요한 시간/리소스가 소요됩니까?

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

돌아온다

"abab"

그리고.

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

다른 솔루션 중 가장 쉬운 솔루션을 선호합니다.이 솔루션이 너무 느릴 경우에만 보다 효율적인 솔루션을 찾도록 노력하십시오.

를 사용하여 결과 길이를 미리 알고 적절한 생성자를 사용하는 경우, 이는 시간이 많이 걸리는 할당이 1개만 수행되고 불필요한 데이터 복사가 발생하지 않으므로 훨씬 효율적입니다.말도 안 되는 소리: 물론 위의 코드가 더 효율적이다.

확장 방법:

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

문자열 대신 간단한 문자에 문자열 빌더 버전을 사용하는 성능 테스트를 통해 주요 성능 우선도를 확인할 수 있습니다. 내 컴퓨터에서는 메쉬 성능 차이가 다음 항목 간에 1:20입니다.Debug.WriteLine('-')반복(1000000) //char 버전 및
Debug.WriteLine("-")입니다.반복(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));

이 질문이 이미 5년이 지났다는 것은 알지만, 에서조차 사용할 수 있는 문자열을 반복하는 간단한 방법이 있습니다.넷 2.0

문자열을 반복하려면:

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

돌아온다

안녕, 안녕, 안녕

문자열을 배열로 반복하려면:

// 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(',');

돌아온다

{"안녕", "안녕", "안녕", ""}

단순하게 받아들여라.

예를 들어, '\t'를 n회 반복한다고 가정해 보겠습니다.

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

를 한 첫 예Enumerable.Repeat:

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

쓸 수 String.Concat:

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

「」를 사용합니다.String.Concat ★★★★★★★★★★★★★★★★★」Enumerable.Repeat사용하는 것보다 비용이 적게 들 것입니다.String.Join

public static Repeat(this String pattern, int count)
{
    return String.Concat(Enumerable.Repeat(pattern, count));
}
var str = new string(Enumerable.Repeat('\t', numTabs).ToArray());

정답은 여러분이 원하는 복잡성에 달려 있습니다.예를 들어 세로 막대로 모든 들여쓰기를 아웃라인화하면 들여쓰기 문자열은 다음과 같이 결정됩니다.

return new string(Enumerable.Range(0, indentSize*indent).Select(
  n => n%4 == 0 ? '|' : ' ').ToArray());

그리고 또 다른 방법은

new System.Text.StringBuilder().Append('\t', 100).ToString()

확장 메서드를 생성할 수 있습니다.

static class MyExtensions
{
    internal static string Repeat(this char c, int n)
    {
        return new string(c, n);
    }
}

그럼 이렇게 쓰시면 됩니다.

Console.WriteLine('\t'.Repeat(10));

저는 괜찮습니다.

public static class Utils
{
    public static string LeftZerosFormatter(int zeros, int val)
    {
        string valstr = val.ToString();

        valstr = new string('0', zeros) + valstr;

        return valstr.Substring(valstr.Length - zeros, zeros);
    }
}

의심의 여지 없이, 인정된 답변은 단일 문자를 반복하는 가장 빠르고 최선의 방법입니다.

Binoj Anthony의 대답은 문자열을 반복하는 간단하고 효율적인 방법입니다.

그러나 코드를 조금 더 늘려도 괜찮다면 어레이 채우기 기술을 사용하여 이러한 문자열을 훨씬 더 빠르게 만들 수 있습니다.비교 테스트에서 아래 코드는 String Builder 시간의 약 35%에 걸쳐 실행되었습니다.코드를 삽입합니다.

public static string Repeat(this string value, int count)
{
    var values = new char[count * value.Length];
    values.Fill(value.ToCharArray());
    return new string(values);
}

public static void Fill<T>(this T[] destinationArray, params T[] value)
{
    if (destinationArray == null)
    {
        throw new ArgumentNullException("destinationArray");
    }

    if (value.Length > destinationArray.Length)
    {
        throw new ArgumentException("Length of value array must not be more than length of destination");
    }

    // set the initial array value
    Array.Copy(value, destinationArray, value.Length);

    int copyLength, nextCopyLength;

    for (copyLength = value.Length; (nextCopyLength = copyLength << 1) < destinationArray.Length; copyLength = nextCopyLength)
    {
        Array.Copy(destinationArray, 0, destinationArray, copyLength, copyLength);
    }

    Array.Copy(destinationArray, 0, destinationArray, copyLength, destinationArray.Length - copyLength);
}

이 어레이 채우기 기술에 대한 자세한 내용은 단일 값으로 어레이를 채우는 가장 빠른 방법을 참조하십시오.

화면을 6,435 z의 $str = [시스템]으로 채웁니다.Linq.Enumable]:: 반복([string]):: new440z", 143, 45)

$str

        string input = "abc"
        string output = "";
        for (int i = 0; i < input.Length; i++)
        {
            output += input[i].ToString() + input[i].ToString();
         
       }
        Console.WriteLine( output);

//출력 = aabbcc

이것을 시험해 보세요.

  1. Microsoft 를 추가합니다.VisualBasic 참조
  2. 사용: 문자열 결과 = Microsoft.Visual Basic.줄들.StrDup(5, hi");
  3. 당신에게 효과가 있는지 알려주세요.

이전 제안과 매우 유사하지만, 저는 단순하게 다음 사항을 적용하고 싶습니다.

string MyFancyString = "*";
int strLength = 50;
System.Console.WriteLine(MyFancyString.PadRight(strLength, "*");

표준.인터넷 정말

언급URL : https://stackoverflow.com/questions/411752/best-way-to-repeat-a-character-in-c-sharp

반응형