我在 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的方法。我会在这里给他们配音:
方法一:
var hashSet = new HashSet<string>(from s in str.Split(',')
where !string.IsNullOrWhiteSpace(s)
select s.Trim());
方法二:
var hashSet = new HashSet<string>();
foreach (string s in str.Split(','))
{
if (!string.IsNullOrWhiteSpace(s))
{
hashSet.Add(s.Trim());
}
}
我问他哪种方法在性能方面更快,有趣的是,方法 2 更快。这是使用 Stopwatch 类完成的计时,方法是在一个循环中运行发布版本中的每个方法 1,000,000 次:
Method 1: 1,440 ms average
Method 2: 1,124 ms average