ASP.NETのC#を使用して(重複を省略して)文字列のコンマ区切りリストを辞書に変換しています:
string str = "1,2, 4, 2, 4, item 3,item2, item 3"; //Just a random string for the sake of this example
どちらの方法がより効率的か疑問に思いましたか?
1-try / catchブロックの使用:
Dictionary<string, string> dic = new Dictionary<string, string>();
string[] strs = str.Split(',');
foreach (string s in strs)
{
if (!string.IsNullOrWhiteSpace(s))
{
try
{
string s2 = s.Trim();
dic.Add(s2, s2);
}
catch
{
}
}
}
2-またはContainsKey()メソッドを使用します。
string[] strs = str.Split(',');
foreach (string s in strs)
{
if (!string.IsNullOrWhiteSpace(s))
{
string s2 = s.Trim();
if (!dic.ContainsKey(s2))
dic.Add(s2, s2);
}
}
編集。参加してくださった皆様、ありがとうございました!
非常に興味深い発見。以下のdtbによって提供される答えを見ると、彼はhashSetを使用する2つの方法を提案しました。ここで吹き替えます:
方法1:
var hashSet = new HashSet<string>(from s in str.Split(',')
where !string.IsNullOrWhiteSpace(s)
select s.Trim());
方法2:
var hashSet = new HashSet<string>();
foreach (string s in str.Split(','))
{
if (!string.IsNullOrWhiteSpace(s))
{
hashSet.Add(s.Trim());
}
}
私は彼に、パフォーマンスの面でどちらの方法が速いか、そして興味深いことに、方法2の方が速いかを尋ねました。リリースビルドの各メソッドをループ内で1,000,000回実行することにより、Stopwatchクラスを使用して行われるタイミングは次のとおりです。
Method 1: 1,440 ms average
Method 2: 1,124 ms average