2016-06-13 78 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:\文件夾'。

相關問題