我有一个C#List:
private List<Tuple<string, string>> _list1 = new List<Tuple<string,string>>();
string keyToLookFor;
string valueToLookFor;
我想使用LINQ搜索此List以检查某个键是否已存在,如果是,则其值是否与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 :(得分:3)
元组列表中的键不是唯一的,首先你可能想要使用
Dictionary<string, string>()
但是如果你想保留列表
_list1.Where( t => t.Item1 == keyToLookFor && t.Item2 == valueToLookFor );
答案 1 :(得分:3)
如果您使用的是C#6(并且每个元组都有一个唯一的键值):
bool exists = _list1.SingleOrDefault(t => t.Item1 == keyToLookFor)?.Item2 == valueToLookFor;
如果您的列表可以包含多个具有相同键值的元组:
bool exists = _list1.Any(t => t.Item1 == keyToLookFor && t.Item2 == valueToLookFor);
答案 2 :(得分:3)
HashSet可以解决问题(它可以处理重复)。值得注意的是,HashSets专为高性能集合操作而设计。如果你的list1非常大和/或你将对它进行频繁的查找,你应该使用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
答案 3 :(得分:0)
您可能应该使用字典,而不是您所描述的内容都是
Dictionary<string,string> _list1 = new Dictionary<string,string>();
if(_list1.containsKey(keyToLookFor)) {
return _list1[keyToLookFor] == valueToLookFor;
}