2016-09-01 7 views
-3

を使用してすべての辞書の値を取得します。私はC#のリスト持ってLINQクエリ

private List<Tuple<string, string>> _list1 = new List<Tuple<string,string>>(); 
string keyToLookFor; 
string valueToLookFor; 

は、私が最初に特定のキーがすでに存在するかどうかを確認するためにLINQを使用して、このリストを検索したいをので、その値が一致valueToLookForを行います。

List.Add(new Tuple<string, string>("1", "data1")); 
List.Add(new Tuple<string, string>("2", "data2")); 
List.Add(new Tuple<string, string>("2", "data3")); 
List.Add(new Tuple<string, string>("3", "data3")); 

この例では、「2」が存在し、そのデータが私が探しているものと一致するかどうかを確認したいと考えています。 LINQでこれを行うにはどうすればよいですか?

+0

なぜあなたがこれをしたい場合は...また、あなたは...のLINQを使用してタプルから値を読み取る方法上の任意のGoogle検索を行っている私はあなたの場合には、それははるかに簡単だと思うクラスを作成しませんクラスは、この前の投稿を参照してください - http://stackoverflow.com/questions/10597629/make-our-list-string-string-string – MethodMan

+0

辞書辞書は、あなたが探しているように聞こえます –

+0

辞書はユニークでないキー?? –

答えて

0

おそらく、代わりにあなたが記述すべては

Dictionary<string,string> _list1 = new Dictionary<string,string>(); 
if(_list1.containsKey(keyToLookFor)) { 
    return _list1[keyToLookFor] == valueToLookFor; 
} 
3

タプルのリストで、キーに内蔵されている辞書を使用すべきではありえない独特の、最初のあなたは

Dictionary<string, string>() 

が、場合を使用する場合がありますリストを保持したい場合

_list1.Where(t => t.Item1 == keyToLookFor && t.Item2 == valueToLookFor); 
+0

なぜ私は辞書を使用していないのかはユニークではないことが必要です。 –

+0

@ HashSetが別個の値を必要とする唯一のクラスだと思った – Edward

+0

辞書に重複キーを追加しようとするとArgumentExceptionが発生する –

3

C#6を使用している場合(各タプルには一意のキー値):

bool exists = _list1.SingleOrDefault(t => t.Item1 == keyToLookFor)?.Item2 == valueToLookFor; 

あなたのリストが同じキー値で複数のタプルを持つことができた場合:

bool exists = _list1.Any(t => t.Item1 == keyToLookFor && t.Item2 == valueToLookFor); 
+0

どうしますか?行う? – Edward

+0

@Edward [Null-Conditional Operator](https://msdn.microsoft.com/en-us/library/dn986595.aspx) –

+0

それで、一致するものがなければfalseを返す必要がありますか? – Edward

3

HashSetのは、トリックを行うだろう(それは重複を扱うことができます)。また、HashSetsは高性能なセット操作のために設計されていることにも注意してください。リスト1が非常に大きく、頻繁にルックアップを実行する場合は、HashSetを使用する必要があります。

List<Tuple<string, string>> list1 = new List<System.Tuple<string, string>>(); 
list1.Add(new Tuple<string, string>("1", "data1")); 
list1.Add(new Tuple<string, string>("2", "data2")); 
list1.Add(new Tuple<string, string>("2", "data3")); 
list1.Add(new Tuple<string, string>("2", "data3")); //duplicate 
list1.Add(new Tuple<string, string>("3", "data3")); 

var hs = new HashSet<Tuple<string, string>>(list1); 

var toCheck = new Tuple<string,string>("2","data3"); 
Console.WriteLine(hs.Contains(toCheck)); //True 
toCheck = new Tuple<string,string>("2","data7"); 
Console.WriteLine(hs.Contains(toCheck)); //False 
関連する問題