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

c#中使用Linq的数组和字典

我将使用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)};