c#中使用Linq的数组和字典
本文关键字:数组 字典 Linq | 更新日期: 2023-09-27 18:08:05
我有一个字典,键为整数类型,值为字符串类型
键值
1 - "A"
2 - "B"
3 - "c"
4 - "D"
5 - "E"
我有一个字符串类型的数组{"A"、"D"、"E"}
现在我想匹配字典和数组,以产生以下输出与字典键
1:true 4:true 5:true
在上面的输出中,整数表示字典键表示值"A"在数组中匹配:- 1=true
我将使用join
查找匹配:
Dictionary<int, string> dict = new Dictionary<int, string>
{
{1, "A"},
{2, "B"},
{3, "c"},
{4, "D"},
{5, "E"},
};
string[] values = new [] {"A","D","E"};
var query =
from kvp in dict
join s in values on kvp.Value equals s
select new {kvp.Key, Found = true};
您也可以使用where values.Contains(kvp.Value)
来代替连接,但这将每次都搜索数组,而连接将创建查找,这将更有效地搜索。对于您发布的数据大小,可能没有太多的性能提升,但对于大型集合,它可能会明显更快。
试着用LINK
:
public List<string> liste = new List<string> { "A", "D", "E" };
public Dictionary<int, string> dic = new Dictionary<int, string>
{
{1, "A"},
{2, "B"},
{3, "c"},
{4, "D"},
{5, "E"},
};
private void TriCustomer()
{
var query = from x in dic
join y in liste on x.Value equals y
select new { x.Key, IsTrue = true };
// check here
foreach (var item in query)
{
MessageBox.Show(item.Key + " " + item.IsTrue);
}
}
您可以创建一个查找函数(本地Func
或类方法),例如
var dictionary = new Dictionary<int, string>
{ {1,"A"},{2,"B"}, {3, "c"}, {4, "D"}, {5, "E"} };
var magicChars = new[]{"A", "D", "E"};
Func<int, bool> isMagicChar = n => dictionary.ContainsKey(n)
&& magicChars.Contains(dictionary[n]);
有一些测试:
Assert.IsTrue(isMagicChar(1));
Assert.IsFalse(isMagicChar(2));
Assert.IsTrue(isMagicChar(4));
Assert.IsTrue(isMagicChar(5));
Assert.IsFalse(isMagicChar(1232));
试一下:
var dictionary = new Dictionary<int, string>(){{1, "A"}, {2, "B"}, {3, "C"}};
var strArray = new[] { "A", "D", "E" };
var result = from item in dictionary
select new {key = d.Key, value = strArray.Contains(d.Value)};