使用Linq在c#中使用Dictionary的数组

时间:2014-06-11 15:50:13

标签: c# arrays linq dictionary

我有一个字典,键为整数类型,值为字符串类型

键 - 值

1 - “A”

2 - “B”

3 - “c”

4 - “D”

5 - “E”

我有一个字符串类型数组

{ “A”, “d”, “E”}

现在我想匹配字典和数组以使用字典键生成以下输出

1:true 4:true 5:true

在上面的输出中,整数表示字典键,表示值“A”在数组中匹配,即: - 1 = true

4 个答案:

答案 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)};

希望这有帮助。