2011-08-13 13 views
2

我正在使用foreach循環和Directory.GetFiles()來收集有關目錄中的文件的一些信息。我想存儲3個字符串:Filename,FilePath,DirectoryName。我可以得到這些信息,但我想知道存儲數據的最佳方式是什麼。3套相應的字符串。如何最好地存儲?

我希望能夠查找一個字符串,並輕鬆地找到其他字符。例如,如果它們位於3個數組中,我可以使用forloop來掃描Filename數組,然後發現我想要的條目位於索引45處。然後我可以使用FilePath [45],DirectoryName [45]來獲取條目在另外兩個陣列中。

這是存儲這些字符串的最高效率嗎?如果是這樣,假設在另一種情況下,我無法事先使用GetFiles()方法獲得數組的大小,那麼List是否是合適的選擇?

+0

取決於您的解決方案也許是值得看一看內置的FileInfo類 – sll

回答

4

如果您有三個關聯值,請將它們封裝在一個類型中。它不需要是一個特別複雜的類型,儘管我可能會使它不可變 - 只有三個從構造函數初始化的屬性。最棘手的位被命名它,因爲FileInfo已經是System.IO一部分......但是,假設你的FileData的(蘇茨基)名定居:

public sealed class FileData 
{ 
    // Or use private readonly string variables and getter-only properties 
    public string FileName { get; private set; } 
    public string Path { get; private set; } 
    public string DirectoryName { get; private set; } 

    public FileData(string fileName, string path, string directoryName) 
    { 
     FileName = fileName; 
     Path = path; 
     DirectoryName = directoryName; 
    } 

    // Optional: override methods from System.Object. 
    // ToString might be really handy; Equals/GetHashCode less likely. 
} 

這會不會是相當有效率(在以下方面內存)作爲三個獨立的陣列,但這將是一個更加實際的使用,尤其是對於LINQ而言。花費時間,你從不處理單獨的數組優化比特真正重要。字符串佔用的內存很可能會使容器對象的開銷變得更小。

可能使這個結構,而不是一個類,這將在某些方面稍微更有效率,而在其他方面效率稍低。除非我有充分的理由不這樣做,否則我通常會使用課程。

是的,我通常會用一個List而非陣列 - Eric Lippert has some good reasons why ......

一件事困擾我稍微:這些三條信息真正正交,或者你可以從構建完整路徑目錄名稱和文件名?如果是這樣,你應該大概只存儲前兩個,並在需要時構建第三個。

+0

這個回答我的問題很好。非常感激。 – Omniabsence

1

您可以創建一個結構來保存這三個值,將它們全部放在List中並使用Linq來選擇正確的項目。

您也可以使用Tuple type

相關問題