我正在使用C#+ VSTS2008 + .Net 3.0。我有一个输入作为字符串数组。我需要输出数组的唯一字符串。任何想法如何有效地实现这一点?
例如,我输入{“abc”,“abcd”,“abcd”},我想要的输出是{“abc”,“abcd”}。
答案 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);