2009-07-30 11 views
3

私はC#+ VSTS2008 + .Net 3.0を使用しています。私は文字列配列としての入力を持っています。そして、私は配列の一意の文字列を出力する必要があります。これを効率的に実装する方法は?C#のコレクションから一意の値を取得する方法は?

たとえば、私は入力{"abc"、 "abcd"、 "abcd"}としたい出力は{"abc"、 "abcd"}です。

var uniquevalues = list.Distinct(); 

あなたにIEnumerable<string>を与える:LINQを使用して

+0

質問タイトルはちょっと誤解を招くことがあります。それはおそらく "どのようにC#でユニークなコレクションを取得する"必要があります。 – angularsen

答えて

19

あなたは配列したい場合:

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 
+0

申し訳ありませんが、私は間違っています。私は.Net 3.0を使用しています、LINQ、任意のソリューションを使用することはできません? – George2

+0

ありがとうフィリップ、私はあなたの返信が好きです! – George2

9

もう1つのopti上HashSetを使用することです:

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

私はまた、LINQで行くと思うが、それはまた、オプションです。

編集:
あなたは多分これが役立つ、3.0への質問を更新しました: Using HashSet in C# 2.0, compatible with 3.5

+0

ありがとうコビ、私もあなたの返信が好きです! – George2

+0

問題ありません。あなたがフィリップの答えを取ることは明らかでしたが(それは良いですが)、より多くの選択肢を持つことは常に良いことです。 – Kobi

2

をあなたはLINQのでその短いと甘いを行くことができますが、場合にuがLINQは、2番目のオプション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); 
関連する問題