我有一堆字符串数据,我可以逐个遍历它。什么是好的集合(以及如何实现它),以便我只获得不同的字符串?
我这样做的客户端甚至不使用.NET 3.5 .Distinct已经出局。他们使用.NET framework 2.0。
我正在一次阅读一个列表,并且在完成之前不知道它将有多少记录。
答案 0 :(得分:1)
一种方法是使用Distinct使字符串变得独一无二:
List<string> a = new List<string>();
a.AddRange(new string[] { "a", "b", "a", "c", "d", "b" });
List<string> b = new List<string>();
b.AddRange(a.Distinct());
LINQ的另一个资源:http://blogs.msdn.com/b/charlie/archive/2006/11/19/linq-farm-group-and-distinct.aspx
另一种方式:使用其他人建议的HashSet;
HashSet<string> hash = new HashSet<string>(inputStrings);
查看此链接,了解如何在.net 2.0中实现它:https://stackoverflow.com/a/687042/284240
如果你没有使用3.5,你也可以手动完成:
List<string> newList = new List<string>();
foreach (string s in list)
{
if (!newList.Contains(s))
newList.Add(s);
}
// newList contains the unique values
另一种解决方案(可能更快一点):
Dictionary<string,bool> dic = new Dictionary<string,bool>();
foreach (string s in list)
{
dic[s] = true;
}
List<string> newList = new List<string>(dic.Keys);
// newList contains the unique values
答案 1 :(得分:1)
如果您使用的是.Net 3.5或更高版本,请将字符串放在List<>
中并使用linq方法Distinct()
。
using System.Linq;
IEnumerable<string> strs = new List<string>(new[] { "one", "two", "three", "one" });
var distinct = strs.Distinct();
在.Net 2.0中,你别无选择,只能手动完成。
答案 2 :(得分:0)
也许我是密集的并且没有完全理解这个问题,但是你不能只使用常规List并且只是使用.Contains方法来检查列表中是否存在每个字符串,然后再将它添加到循环中?如果你有很多字符串,你可能需要留意性能。