2017-02-20 52 views
1

良好的一天所有,比较节点故障C#字典<字符串,字符串[]>

我有一个Dictionary<String, String[])>,与像一个密钥=>值例如以下:

{ "Eten/drinken", new string[] { "canteen", "mcdonald's", "mimi" } } 

我需要比较字符串part与字典的值之一:

if (categories.Any(x => x.Value.Contains(part))) { 
     category = categories.FirstOrDefault(x => x.Value.Contains(part)).Key; 
} 

在一个场景中part = "mcdonald's veghel veghel",这使得与字典值的比较回来false

为什么它是假的? "mcdonald's veghel veghel"确实包含mcdonald's并且零空间比较的确按照他们应该的方式进行。

+1

因为他们没有包含'“麦当劳veghel veghel“'子串。 – zerkms

+1

*为什么它是假的?* - 好吧,你把麦克唐纳的veghel veghel和'{“canteen”,“mcdonald's”,“mimi”}'进行了比较。如果你想比较这个值是否包含来自'part'变量的任何单词,你需要将你的''mcdonald's veghel veghel''分成'{“mcdonald's”,“veghel”}',然后检查是否所有它们存在于字典的数组中.. –

+0

有趣的是,这实际上是我之前在我的代码中做过的,但是认为它会太狡猾。谢谢你让我的事情变清楚! – MwBakker

回答

2

其实String.Contains方法将检查目前给定字符串中任何指定的subsring。遗憾的是没有x.Value包含给定的字符串,而给定的值中包含项目/ x.Value的S,所以你必须改变你的查询如下所示:

var collectionResult = categories.FirstOrDefault(x => x.Value.Any(s=> part.Contains(s))); 
if(collectionResult != null) 
{ 
    var selectedKey = collectionResult.Key; 
} 
+1

好主意,可以这样做,而不是分裂部分。 –

+0

非常感谢您的建议,并感谢您回复的速度! – MwBakker

+1

@MwBakker:没有提到,我们都在这里帮忙。很高兴帮助你的朋友 –

3

lambda x.Value.Contains(part)中的表达意味着{"canteen", "mcdonald's", "mimi"}的任何元素都包含字符串"mcdonald's veghel veghel",即false。你想要的条件的倒数,即其中长字符串part包含任何从列表中的关键字:

categories.Any(x => x.Value.Any(s => part.Contains(s))) 
+0

@zerkms你是对的,那里需要另一个'Any'。 – dasblinkenlight

+0

谢谢!快速反应和极大的建议 – MwBakker

+1

它还只是检查存在,其实op是以'.Key'对应的项目。我认为你必须做一些编辑才能使它完美。谢谢 –

相关问题