【问题标题】:Array with Dictionary in c# using Linq [closed]使用Linq在c#中使用字典的数组[关闭]
【发布时间】:2014-08-01 18:31:18
【问题描述】:

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

键-值

1 - “A”

2 - “B”

3 - "c"

4 - “D”

5 - “E”

我有一个字符串类型的数组

{"A","D","E"}

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

1:真 4:真 5:真

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

【问题讨论】:

  • 如果您使用字符串搜索字典?为什么 int 是关键?
  • 您的字典键和数组索引是否相似以进行比较?
  • 因为如果一个字符串在数组中匹配,那么它的键应该是输出
  • @Mak no 字典键和数组索引不一样
  • 感谢分享。这是一个问题,而不是一个问题。请展示您尝试过的内容。否则,听起来您是在要求我们为您做这件事。

标签: c# arrays linq dictionary


【解决方案1】:

我会使用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) 代替连接,但每次都会搜索数组,而连接将创建查找更有效的搜索。对于您发布的数据的大小,性能提升可能不大,但对于大型集合,它可能会明显更快。

【讨论】:

    【解决方案2】:

    试试这对 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);
                    }
                 }
    

    【讨论】:

      【解决方案3】:

      您可以创建一个查找函数(本地 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));
      

      【讨论】:

        【解决方案4】:

        试试这样:

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

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-30
          • 1970-01-01
          相关资源
          最近更新 更多