【问题标题】:Check if Dictonary<string,object> exists in List<Dictionary<string,object>>? [closed]检查 List<Dictionary<string,object>> 中是否存在 Dictionary<string,object>? [关闭]
【发布时间】:2013-05-15 12:32:31
【问题描述】:

我有一个List,它被定义为:

List<Dictionary<string,object>>()

这个List 填充在foreach loop 中,基本上包含来自ProperyInfoproperty names and values

在另一个foreach loop 中,我想再次遍历属性并检查是否存在包含与我正在查找的值对应的键的字典。例如:

foreach(var item in controls)
{
    if(item !=null && list.Contains(...)) //What do I put in here
    {

    }
    else
    {

    }

}

controlsList&lt;Control&gt;,其中Control 是具有一个属性Name 的类。 item 指的是一个Control

我想过做list.Contains(item.Name),但这显然行不通。

【问题讨论】:

  • 那么您想知道给定键是否在列表中的任何字典中吗?或者您是否有另一个 Dictionary 并且需要知道它是否具有与列表中的字典完全相同的键值对集,或者什么?甚至不显示item 的类型,这使得提供帮助变得更加困难。
  • 您可以使用Dictionary&lt;string, Dictionary&lt;string,object&gt;&gt; 而不是List
  • @AndreCalil 或者只是一个 Dictionary&lt;string, object&gt;,其中包含大量对象...毕竟,它的 设计 可以扩展到非常大的尺寸。
  • 我认为你需要Dictionary&lt;Type,Dictionary&lt;string,object&gt;&gt; 而不是List&lt;Dictionary&lt;string,object&gt;&gt;
  • @Xaisoft 请编辑 that 到问题中。

标签: c# linq list dictionary .net-3.5


【解决方案1】:

您使用对字典的引用。字典是一种引用类型,所以列表会根据传递的引用检查字典是否包含在其中。

【讨论】:

  • 他问的是如何做某事,而不是当他在List&lt;Dictionary&lt;...&gt;&gt; 上调用Contains 时会发生什么。但是,由于问题的模糊性,他所问的问题还不是很清楚。
  • 但问题是如何检索字典的引用。如果他有它,他就不需要迭代列表。
  • 如果他要使用Contains,他必须拥有它。
  • @Renan 那么也许他不应该使用Contains。他从来没有说过他做过;这只是他试图解决的问题。在不知道 OP 实际想要以什么结尾的情况下,根本无法回答。
  • 我认为没有其他方法可以检查列表中是否存在项目,除非他想从 Dictionary 继承并重载相等运算符。
【解决方案2】:

要确定密钥是否存在于任何您拥有的字典中,您可以这样做:

if(list.Any(dic => dic.ContainsKey(item.Name)))

【讨论】:

  • 我猜是 SO Q&A 咨询服务+1。
  • @AndreCalil 是的。当我发布我的第一条评论时,我 99% 确定这是答案,但我想我会利用教学时间来帮助 OP 学习一些关于如何提问的知识。此外,如果这在 1% 之内而不是这么简单,那么尝试解决它可能是一个有趣的问题。
  • @Servy - 有时当我们不理解问题时,很难提出正确的问题。
  • @Xaisoft 如果您甚至不知道最终想要什么结果,那么您需要在发布之前弄清楚这一点。通常,您会知道最终需要什么,而不是如何到达那里。这通常可以通过简单的示例输入/输出轻松显示。如果您显示一个示例列表(可能非常小)以及一个或两个输入值和结果,除了描述之外,很明显您提供的是单个键,而不是集合。
  • @Servy,感谢您的解决方案有效。我会在我的问题上做得更好,我只是不确定我是在检查 List 是包含整个 Dictionary 对象还是单个值,因为它是 Dictionary 对象的 List。希望这不会令人困惑。
猜你喜欢
  • 1970-01-01
  • 2014-10-22
  • 2018-01-25
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
相关资源
最近更新 更多