【问题标题】:How to find dictionary column value contained my list value or not by using query in c#如何通过在c#中使用查询来查找字典列值是否包含我的列表值
【发布时间】:2018-05-29 06:28:56
【问题描述】:

我有价值清单

list1[110,120,130]

我想在字典中检查我的字典表列值是否像

110_abc_ro
120_cfg_go
130_dfg_lo
110_abc_io
170_cfg_jo

是否包含列表值。 我想要像这样的输出 110_abc_ro,110_abc_io 用于列表值 110

【问题讨论】:

  • 你的意思是System.Linq表达式中的查询吗?
  • 是的,如果可能的话,这将是很大的帮助
  • 你可能用错了字典,看来你最好使用这样的东西。 var dict = Dictionary<int,List<string>(); 或者甚至只是 List<MyObject>() 以便您更轻松地添加、查询和使用它...将其写入答案,但问题相当广泛,X/Y'ish
  • 您的list1[110,120,130] 看起来更像Tuple,然后是Dictionary。这可能只是我的一个困惑点。你能提供一个更好的数据表示的sn-p吗?
  • 我有数据库(包含许多 excel 文件),我正在从字典中获取我的数据。我有一个列表,其中包含一些数字,例如 110,120,130 。我想知道列表值 110 是否包含在任何 excel 文件名中

标签: c# linq dictionary


【解决方案1】:

由于我无法从问题中分辨出您的字典名称/键类型是什么,因此我仅此而已。对于每个列表项(110、120 等),您现在遍历字典中的条目。每当您的字典中的值包含您从列表中迭代的值时,它会将其写入字符串,然后您可以发送/写入/其他内容。

foreach (int i in list1)
{
    string output = "";

    foreach (KeyValuePair<var, string> kvp in yourDictionary)
    {
        if (kvp.Value.Contains(i.ToString()))
        {
            output += kvp.Value + ", ";
        }
    }

    //print your outputstring here.
}

编辑:

您可以使用 yourDictionary.Values.Select(x =&gt; x.Value.Contains(i.ToString())); 代替 foreach。使用Lucifer的答案中的一点,您可以将其变成以下内容;

foreach (int i in list1)
{
    string output = String.Join(",", yourDictionary.Values.Select(x => x.Value.Contains(i.ToString())));
}

【讨论】:

  • 这里我们可以使用查询吗?
  • @jaymingaudana 查看更新的答案。如果您从 Lucifer 的评论中获取更多信息,您甚至可以省略 list-foreach。
  • 您的 linq 将无法按照 OP 的要求工作它将选择不正确的 IEnumerable>。
  • @Lucifer 你是对的。我已经更新了声明,所以它会返回一个IEnumerable&lt;string&gt;。现在应该没问题了。
  • @Lucifer 我也选择不复制它,以保持答案不同,而不是“更多相同”。还;据我所知,您没有对结果进行分组(即首先全部 110,然后全部 120)。使用示例 OP,您的结果将是 110、120、130、110。这样您就可以将所有 110、120、130 等放在一条线上。这确实是偏好,但它使答案不同:)
【解决方案2】:

您可以使用String.Join() 加入与您的 int 列表匹配的所有值

按照 MSDN 这个方法Concatenates 一个字符串集合的所有元素,在每个元素之间使用指定的分隔符。

例如:

  string values = String.Join(",", yourDictionary.Where(x => list.Any(ele => x.Value.Contains(ele.ToString()))).Select(x => x.Value).ToList());

【讨论】:

    【解决方案3】:

    试试这个:

    string result= "";
    list1.ForEach(item => {
    yourDictionary.ToList().ForEach
    (
        pair =>
        {
            if (pair.Value.Contains(item.ToString()))
            {
                result = result + pair.Value + ", ";
            }
        }
    );
    });
    

    【讨论】:

      【解决方案4】:

      这里有简单的解决方案:

      int[] list1 = { 110, 120, 130 };
      List<string> dict = new List<string> { "110_abc_ro", "120_cfg_go", "130_dfg_lo", "110_abc_io", "170_cfg_jo" };
      
      for (int i = 0; i < list1.Length; i++)
      {
          string str = "Values from dictionary containing " + list1[i] + ":\n";
          str += String.Concat(dict.Where(val => val.Contains(list1[i].ToString())).Select(val => val + ", "));
          Console.Write(str);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        • 2019-02-25
        • 2015-07-04
        • 2021-05-18
        • 1970-01-01
        • 2020-05-22
        • 2018-07-24
        相关资源
        最近更新 更多