在字典中搜索字典c#

时间:2013-09-17 12:30:18

标签: c# dictionary

如何检查以下方案集合是否具有某个字符串值?我已经阅读了几个类似的例子,但没有什么能真正帮助我。 非常感谢,

示例我需要的内容

    foreach(var item in data.Valuations)
    {
        if(item.Schemes.Contains("my string")) {
           // Do something 
        }
    }

代码

    public Valuation[] Valuations { get; set; }

    public IEnumerable<string> Schemes
    {
        get { return this.Values.Keys; }
    }

    public Dictionary<string, Dictionary<string, double>> Values { get; internal set; }

更新

我设法使用以下代码行完成。

    var model = new DetailViewModel 
    {
        model.Data = ...
    }

    // New bit

    model.Data.SelectMany(x => x.Schemes).Where(x => x == "my string");

然而,在查看model.Data时,它还没有应用过滤器。我错过了一些愚蠢的东西吗? 'my string'位于Schemes

3 个答案:

答案 0 :(得分:3)

最有效的方法是使用dictionary classContainsKey方法:

if (Values.ContainsKey("my string")) 
{

}

如果您真的想要对IEnumerable<String> Schemes媒体资源进行操作,那么您只需确保using System.Linq位于代码顶部,.Contains将完全按照您的问题运作

答案 1 :(得分:1)

使用SelectMany

尝试linq
if(Values.SelectMany(x => x.Value.Keys).Any(x => x == "my string"))
{
   //do your stuff here
}

这将创建内部词典中所有键的集合,您可以使用后续查询进行搜索,在此示例中使用Any,如果找到该字符串,则返回true。

答案 2 :(得分:0)

你的意思是这样的:

    if(schemes.Any(x=>x=="my string")) 
    {
       // Do something
    }

您可以使用LINQ中的Any来检查是否存在任何元素匹配谓词 - &gt;这里检查是否有任何字符串等于“我的字符串”。

只有在使用Contains时才能使用Lists,因此其他解决方案是:

public List<string> Schemes
{
    get { return this.Values.Keys.ToList(); }
}

public Dictionary<string, Dictionary<string, double>> Values { get; internal set; }

然后

if(schemes.Contains("my string")) 
{
   // Do something
}

有效。

但我建议在列表中使用Linq而不是Contains