これらの方法の中で最も効率的な方法はどれですか?文字列の最初の文字を判別する最も効率的な方法は?
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
私もchar型のインデックスを使用すると、きれいな方法であることを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] .Title [0] = 'A'c' –
@Charles:なぜcharを文字列に変換したいのですか?固定長の1文字列を渡しても意味がありません。 – Falanwe
「最初の文字」が意味するものと、それに含まれるものに応じて、問題の原因となる大きな抜け穴があります。returnList
C#の文字列は、UTF-16、可変長符号化され、そしてreturnList
は、文字列の配列である場合、returnList[i]
のみユニコード点の一つchar
かもしれない含みます。あなたは、文字列の最初のUnicode書記戻したい場合は、次の
string s = returnList[i].Title;
if (string.IsNullOrEmpty(s))
return s;
int charsInGlyph = char.IsSurrogatePair(s, 0) ? 2 : 1;
return s.Substring(0, charsInGlyph);
をあなたは部品表、タグ付き、および結合文字と同じ問題に実行することができます。これらはすべて有効な文字ですが、ユーザーに表示された場合は意味がありません。
文字ではなく、Unicodeポイントまたはグラフェンを使用する場合は、文字列を使用する必要があります。 Unicode書記素は複数の文字にすることができます。
重要ですか?パフォーマンスに問題がありますか?ベンチマークは何を言ったのですか? – Oded
あなたのコードを読んで読んだときに、私はあなたに最も合ったものを使います。 – hspain
あなたが好奇心をそそり、公正であれば、それは簡単に測定できます。 – codekaizen