2016-06-13 28 views
1

我有一个文件夹列表中,我包含我要处理的语言列表:如何检查字符串是否包含在另一个字符串列表中?

eng_US 
spa_ES 

等等

我有一个包含子文件夹为每种语言一个目录列表它具有。它们可能比我的语言列表中定义的更多。它可以是这样的:

ja-JP 
eng_US 
spa_Es 
fr_FR 

我列出该特定文件夹的目录是这样的:

string[] directories = Directory.GetDirectories(path); 

我想与的Linq这是我的私人语言列表内的所有文件夹。

我想类似这样的东西:

string[] directories = Directory.GetDirectories(path).Where(x => x.Contains(languageList.Value)); 

但是,很明显是坏:(

我怎样才能得到只有那些在我的私人语言列表中也列出的文件夹

?那么,如何检查我的结果路径是否包含在与Linq的另一个字符串列表中?

谢谢!

注: 我的语言列表保存在字典

IDictionary<int, string> languages; 
+2

“但是,显然是不好的” - 你为什么这么认为? –

+0

因为它不起作用,而且格式不正确。它甚至没有编译。我试图使用Lynq的逻辑,但没有工作... – Sonhja

+0

可能的重复[是否.NET有一种方法来检查List a是否包含列表b中的所有项?](http://stackoverflow.com/questions/1520642/do-net-have-a-way-to-check-if-list-a-contains-all-items-in-list-b) –

回答

1

你很接近 - 记得languageList是你关心你的LINQ的语句将一次返回一个字符串值,通过你的Where条款放,所以你会希望它看起来名称列表如下:

string[] directories = Directory.GetDirectories(path).Where(x => languageList.Contains(x)).ToArray(); 

基本上说Give me back and returned value that is contained in languageList

希望是有道理的。

+1

别陷入他的陷阱......哪里(...)'不返回'string []'type – grek40

+0

对不起,@grek愚蠢的错误....编辑返回数组。 –

+0

别担心!这很激动人心!我回来了一个列表:D – Sonhja

0

您需要比较目录名称而不是完整路径。此外,您还要检查目录路径是否包含从语言列表中获取的值。

string[] directories = Directory.GetDirectories(path) 
           .Where(d => languageList.Contains(Path.GetFileName(d))) 
           .ToArray(); 

请注意,你必须使用Path.GetFileName,因为这会从 'C:\文件夹\ endfolder' 返回 'endfolder'。而Path.GetDirectoryName将返回'C:\文件夹'。

相关问题