가장 효율적인 방법은 무엇입니까? 더 좋은 방법은 있습니까?문자열의 첫 번째 문자를 결정하는 가장 효율적인 방법은 무엇입니까?
this.returnList[i].Title[0].ToString()
또는
this.returnList[i].Title.Substring(0, 1)
가장 효율적인 방법은 무엇입니까? 더 좋은 방법은 있습니까?문자열의 첫 번째 문자를 결정하는 가장 효율적인 방법은 무엇입니까?
this.returnList[i].Title[0].ToString()
또는
this.returnList[i].Title.Substring(0, 1)
그들은 매우 빠르게 두 위치 :
숯불 지수
var sample = "sample";
var clock = new Stopwatch();
for (var i = 0; i < 10; i++)
{
clock.Start();
for (var j = 0; j < 10000000; j++)
{
var first = sample[0].ToString();
}
clock.Stop();
Console.Write(clock.Elapsed);
clock.Reset();
}
// Results
00:00:00.2012243
00:00:00.2207168
00:00:00.2184807
00:00:00.2258847
00:00:00.2296456
00:00:00.2261465
00:00:00.2120131
00:00:00.2221702
00:00:00.2346083
00:00:00.2330840
하위 문자열
var sample = "sample";
var clock = new Stopwatch();
for (var i = 0; i < 10; i++)
{
clock.Start();
for (var j = 0; j < 10000000; j++)
{
var first = sample.Substring(0, 1);
}
clock.Stop();
Console.Write(clock.Elapsed);
clock.Reset();
}
// Results
00:00:00.3268155
00:00:00.3337077
00:00:00.3439908
00:00:00.3273090
00:00:00.3380794
00:00:00.3400650
00:00:00.3280275
00:00:00.3333719
00:00:00.3295982
00:00:00.3368425
나는 또한 문자 인덱스를 사용하여 깨끗한 방법입니다 BrokenGlass에 동의
그것을 쓰는 중. 게다가 10 조 시간이면 훨씬 빨라집니다!
그런 명확한 방법으로 차이점을 설명해 주셔서 감사합니다! – slinzerthegod
@slinzerthegod 문제가 없습니다. LINQPad 다운로드 http://www.linqpad.net/ 무료이며 절대적으로 필요합니다. C# 코드를 빠르고 쉽게 테스트하고 테스트 할 수 있습니다. 또한 질문에 만족스럽게 답변 한 경우 대답을 확인하십시오. –
연산자 :
char c = returnList[i].Title[0];
여기에는 적어도 하나의 문자가 있다고 가정합니다. 주어진 문자가 아닌 경우이를 확인해야합니다.
성능이 거의 동일해야합니다.
작업의 값 비싼 부분은 문자열을 만드는 것이고 더 효율적인 방법은 없습니다.
가능한 경우가 아니면 모든 가능한 문자에 대한 문자열을 미리 만들고 사전에 저장하려고하지만 사소한 작업을 위해 많은 메모리를 사용합니다.
returnList[I].Title[0]
은 새로운 string
을 만들 필요가 없으므로 원래의 문자에서 문자에 액세스하는 것보다 훨씬 빠릅니다. 물론 문자열이 비어 있으면 예외가 발생하므로 먼저 확인해야합니다.
일반적으로 고정 길이가 1 인 문자열은 절대 사용하지 마십시오. 즉, char
이 사용됩니다.
성능 차이는 문제가되지 않지만 더 나은 가독성은 분명히 있습니다.
사실, 문자열을 다시 문자열로 변환 할 때 새로운 문자열을 만들어야합니다. ('char.ToString()') –
@Charles 왜 문자를 비교하지 않으시겠습니까? 'returnList [I]. 제목 [0] = 'A'c' –
@Charles : 왜 숯을 다시 문자열로 변환하고 싶습니까? 고정 길이의 1 문자열을 돌아 다니는 것은 의미가 없습니다. – Falanwe
코드에 "첫 번째 문자"가 의미하는 것과 무엇이 returnList
에 포함되어 있는지에 따라 문제가 발생할 수있는 큰 허점이 있습니다.
C 번호 문자열은 UTF-16, 가변 길이 인코딩을 포함하고 returnList
문자열의 배열 인 경우, returnList[i]
은 유니 포인트의 하나 char
수 있습니다. 당신은 문자열의 첫 번째 유니 코드 자소 반환 할 경우
string s = returnList[i].Title;
if (string.IsNullOrEmpty(s))
return s;
int charsInGlyph = char.IsSurrogatePair(s, 0) ? 2 : 1;
return s.Substring(0, charsInGlyph);
당신은 BOM을, 태그 및 결합 문자와 같은 문제로 실행 할 수 있습니다; 이들은 모두 유효한 문자이지만 사용자에게 표시되면 의미가 없습니다.
문자가 아닌 유니 코드 포인트 또는 문자를 원한다면 문자열을 사용해야합니다. 유니 코드 글자체는 하나 이상의 문자 일 수 있습니다.
중요합니까? 성능 문제가 있습니까? 벤치 마크에서 뭐라고 말 했나요? – Oded
코드를 다시 읽을 때 가장 이해하기 쉬운 코드를 사용합니다. – hspain
그리고 호기심이 있다면, 그것은 공정합니다. 측정하는 것은 간단합니다. – codekaizen