如何从C#中的集合中获取唯一值?

时间:2009-07-30 10:43:56

标签: c# .net visual-studio-2008

我正在使用C#+ VSTS2008 + .Net 3.0。我有一个输入作为字符串数组。我需要输出数组的唯一字符串。任何想法如何有效地实现这一点?

例如,我输入{“abc”,“abcd”,“abcd”},我想要的输出是{“abc”,“abcd”}。

3 个答案:

答案 0 :(得分:19)

使用LINQ:

var uniquevalues = list.Distinct();

这会给你一个IEnumerable<string>

如果你想要一个数组:

string[] uniquevalues = list.Distinct().ToArray();

如果您不使用.NET 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 :(得分:9)

另一种选择是使用HashSet

HashSet<string> hash = new HashSet<string>(inputStrings);

我想我也会选择linq,但这也是一个选择。

编辑:
您已将问题更新为3.0,这可能会有所帮助: Using HashSet in C# 2.0, compatible with 3.5

答案 2 :(得分:2)

你可以和Linq一起使用它的简短和甜蜜但是如果你不想LINQ尝试第二个选项HashSet

选项1:

string []x = new string[]{"abc", "abcd", "abcd"};    
IEnumerable<string> y = x.Distinct();    
x = Enumerable.ToArray(y);

选项2:

HashSet<string> ss = new HashSet<string>(x);
x = Enumerable.ToArray(ss);