我有一个字典,键为整数类型,值为字符串类型
键 - 值
1 - “A”
2 - “B”
3 - “c”
4 - “D”
5 - “E”
我有一个字符串类型数组
{ “A”, “d”, “E”}
现在我想匹配字典和数组以使用字典键生成以下输出
1:true 4:true 5:true
在上面的输出中,整数表示字典键,表示值“A”在数组中匹配,即: - 1 = true
答案 0 :(得分:3)
我会使用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)
而不是连接,但每次都会搜索数组,而连接将创建将更有效搜索的查找。对于您发布的数据大小,可能没有太大的性能提升,但对于大型集合,它可能会明显更快。
答案 1 :(得分:1)
尝试使用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);
}
}
答案 2 :(得分:0)
您可以创建查找功能(本地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));
答案 3 :(得分:0)
试试这样:
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)};
希望这有帮助。