C#不同数据的集合

时间:2011-12-20 08:35:55

标签: c# asp.net collections

我有一堆字符串数据,我可以逐个遍历它。什么是好的集合(以及如何实现它),以便我只获得不同的字符串?

我这样做的客户端甚至不使用.NET 3.5 .Distinct已经出局。他们使用.NET framework 2.0。

我正在一次阅读一个列表,并且在完成之前不知道它将有多少记录。

3 个答案:

答案 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

https://stackoverflow.com/a/1205813/284240

答案 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方法来检查列表中是否存在每个字符串,然后再将它添加到循环中?如果你有很多字符串,你可能需要留意性能。