C#에서 문자를 반복하는 가장 좋은 방법
스트링을 생성하는 가장 좋은 방법은 무엇입니까?\t
는 C#에 있습니다.
저는 C#를 배우고 있고 같은 말을 하는 다른 방법을 실험하고 있습니다.
Tabs(uint t)
를 반환하는 함수입니다.string
와 함께t
의 양\t
의
예를들면Tabs(3)
돌아온다"\t\t\t"
다음 3가지 구현 방법 중 어느 것이Tabs(uint numTabs)
최선이요?
물론 그것은 "최고"가 무엇을 의미하느냐에 달려있다.
LINQ 버전은 2줄로 되어 있어 좋습니다.그러나 Repeat 및 Aggregate 호출에 불필요한 시간/리소스가 소요됩니까?
그
StringBuilder
버전은 매우 명확하지만StringBuilder
수업이 좀 느리다고?그
string
버전은 기본입니다.그것은 이해하기 쉽다는 것을 의미합니다.전혀 상관없나요?다 똑같아요?
이것들은 모두 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
이것을 시험해 보세요.
- Microsoft 를 추가합니다.VisualBasic 참조
- 사용: 문자열 결과 = Microsoft.Visual Basic.줄들.StrDup(5, hi");
- 당신에게 효과가 있는지 알려주세요.
이전 제안과 매우 유사하지만, 저는 단순하게 다음 사항을 적용하고 싶습니다.
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
'programing' 카테고리의 다른 글
NSURLC Connection을 사용하여 신뢰할 수 없는 증명서를 SSL로 접속하려면 어떻게 해야 합니까? (0) | 2023.04.16 |
---|---|
2개의 리스트에 걸쳐 반복하여 각 리스트에서1개의 요소를 얻는 더 좋은 방법이 있을까요? (0) | 2023.04.16 |
MVVM 및 VM 컬렉션 (0) | 2023.04.16 |
UIStackView에서 프로그래밍 방식으로 보기 추가 (0) | 2023.04.16 |
각 시트를 워크북에 저장하여 CSV 파일을 구분합니다. (0) | 2023.04.16 |