IE 문자열 에 숫자를 지정할 수 있습니다 .
이 사실을 처음 접했지만 지금은 알게 되었고 이 사실을 쉽게 변환할 수 있는 방법을 찾을 수 없다는 사실에 놀랐습니다.IEnumerable<char>에 이르기까지string.
내가 생각하는 가장 좋은 방법은string str = new string(myEnumerable.ToArray());, 하지만, 제가 보기에, 이것은 새로운 것을 창조할 것 같습니다.char[], 그리고 나서 새로운 것을 만듭니다.string비싼 것 같네요
저는 이것이 에 내장된 공통 기능이라고 생각했을 것입니다.NET 프레임워크 어딘가에 있습니다.이것을 하는 더 간단한 방법이 있습니까?
관심있는 분들은 문자열을 필터링하기 위해 LINQ를 사용합니다.
string allowedString = new string(inputString.Where(c => allowedChars.Contains(c)).ToArray());
사용하시면 됩니다.
var allowedString = String.Concat(
inputString.Where(c => allowedChars.Contains(c))
);
주의 사항: 이 접근 방식은 성능에 영향을 미칩니다.String.Concat특수한 대소문자 집합이 아니기 때문에 모든 문자가 문자열로 변환된 후 문서에 언급된 대로 연결된 것처럼 수행됩니다.물론 이를 통해 이 작업을 수행할 수 있는 기본적인 방법이 제공되지만, 더 나은 작업을 수행할 수 있습니다.
프레임 내에서 특별한 경우를 제공할 구현은 없다고 생각합니다.char실행해야 합니다.문자열 작성기에 문자를 추가하는 간단한 루프는 작성하기에 충분히 간단합니다.
여기 제가 개발 기계에서 찍은 몇 가지 벤치마크가 있는데, 그것은 옳아 보입니다.
32비트 릴리스 빌드에서 300자 시퀀스로 1000000회 반복:
대상 배열 문자열: 00:00:03.1695463콘캣 : 00:00:07:2518054StringBuilderChars : 00:00:03.1335455StringBuilder 문자열: 00:00:06.4618266
static readonly IEnumerable<char> seq = Enumerable.Repeat('a', 300);
static string ToArrayString(IEnumerable<char> charSequence)
{
return new String(charSequence.ToArray());
}
static string Concat(IEnumerable<char> charSequence)
{
return String.Concat(charSequence);
}
static string StringBuilderChars(IEnumerable<char> charSequence)
{
var sb = new StringBuilder();
foreach (var c in charSequence)
{
sb.Append(c);
}
return sb.ToString();
}
static string StringBuilderStrings(IEnumerable<char> charSequence)
{
var sb = new StringBuilder();
foreach (var c in charSequence)
{
sb.Append(c.ToString());
}
return sb.ToString();
}
의 릴리스를 위해 편집되었습니다.넷코어 2.1
의 릴리스에 대한 테스트를 반복합니다.Net Core 2.1, 결과는 다음과 같습니다.
"Concat"을 1000000회 반복하는데 842ms가 걸렸습니다.
"new String"을 1000000회 반복하는데 1009ms가 걸렸습니다.
1000000번의 "message"를 반복하는 데 902ms가 걸렸습니다.
간단히 말해서, 만약 당신이 사용하고 있다면요.넷코어 2.1 이상,Concat왕입니다.
저는 이 문제를 다른 질문의 주제로 삼았지만 점점 더 이 질문에 대한 직접적인 대답이 되고 있습니다.
3가지 간단한 변환 방법에 대한 성능 테스트를 해봤습니다.IEnumerable<char>에 이르기까지string 방법들은, 은
새끈
return new string(charSequence.ToArray());
콘캣
return string.Concat(charSequence)
스트링빌더
var sb = new StringBuilder();
foreach (var c in charSequence)
{
sb.Append(c);
}
return sb.ToString();
제 테스트에서, 그것은 연결된 질문에 자세히 나와 있습니다.1000000복의 "Some reasonably small test data"는 이런.면,
"Concat"을 1000000회 반복하는데 1597ms가 걸렸습니다.
1000000번의 "새 문자열"을 반복하는 데 869ms가 걸렸습니다.
"StringBuilder"를 10000회 반복하는데 748ms가 걸렸습니다.
이것은 나에게 사용할 좋은 이유가 없다는 것을 암시합니다.string.Concat이 일에 있어서는단순화를 원하는 경우 새 문자열 접근 방식을 사용하고 성능을 원하는 경우 StringBuilder를 사용합니다.
저는 제 주장에 대해 주의를 기울일 것입니다. 실제로 이 모든 방법은 잘 작동하며, 이 모든 것이 최적화를 초과할 수 있습니다.
.NET 4부터는 IE numberable을 인수로 사용하는 문자열 메서드가 많습니다.
string.Concat(myEnumerable);
또 다른 가능성은 다음과 같습니다.
string.Join("", myEnumerable);
저는 성과를 측정하지 않았습니다.
다음은 StringBuilder의 보다 간결한 답변 버전입니다.
return charSequence.Aggregate(new StringBuilder(), (seed, c) => seed.Append(c)).ToString();
Jeff Mercado가 사용한 것과 동일한 테스트를 사용하여 시간을 조정했는데, 이 테스트는 동일한 300자 시퀀스(32비트 릴리스 빌드)에서 1,000,000회 반복에 걸쳐 1초 느렸습니다.
static string StringBuilderChars(IEnumerable<char> charSequence)
{
var sb = new StringBuilder();
foreach (var c in charSequence)
{
sb.Append(c);
}
return sb.ToString();
}
그래서 만약 여러분이 축전지의 팬이라면, 여기 있습니다.
제 데이터는 조드렐이 올린 결과와 상반됩니다.먼저 제가 사용하는 확장 방법을 살펴보겠습니다.
public static string AsStringConcat(this IEnumerable<char> characters)
{
return String.Concat(characters);
}
public static string AsStringNew(this IEnumerable<char> characters)
{
return new String(characters.ToArray());
}
public static string AsStringSb(this IEnumerable<char> characters)
{
StringBuilder sb = new StringBuilder();
foreach (char c in characters)
{
sb.Append(c);
}
return sb.ToString();
}
나의결과
와 함께
- STRLEN = 31
- ITERATION = 10000
인풋
((IEnumerable<char>)RandomString(STRLEN)).Reverse()
결과.
- 콘캣 : 1x
- 신제품 : 3배
- StringBuilder: 3x
인풋
((IEnumerable<char>)RandomString(STRLEN)).Take((int)ITERATIONS/2)
결과.
- 콘캣 : 1x
- 신제품 : 7배
- StringBuilder: 7x
인풋
((IEnumerable<char>)RandomString(STRLEN))(이것은 그저 업캐스트일 뿐입니다)
결과.
- 콘캣 : 0ms
- 신제품 : 2000ms
- StringBuilder: 2000ms
- 다운캐스트 : 0ms
인텔 i5760 과녁을 겨누고 실행했습니다.NET Framework 3.5.
언급URL : https://stackoverflow.com/questions/11654190/ienumerablechar-to-string
'programing' 카테고리의 다른 글
| Android Word-Wrap 편집 텍스트 텍스트 (0) | 2023.09.11 |
|---|---|
| Changed behaviour of java.sql.Date after OJBC client upgrade (0) | 2023.09.11 |
| C에서 "==" 연산자의 반환 값 (0) | 2023.09.11 |
| 부모 구성 요소의 angular2 호출 함수 (0) | 2023.09.11 |
| Postgre와 동등한 MySQL은 무엇입니까?SQL의 설명 분석 (0) | 2023.09.11 |