2013-11-28 32 views
0

使用增加尺寸...在列表

string[] myFiles = Directory.GetFiles(FilePathIn, "*.dat", SearchOption.TopDirectoryOnly); 

我得到的文件列表返回。除此之外,我想保留一组int标志。我即将创建一个元组列表,例如List<Tuple<int, string>>,然后循环遍历myfiles,将每个元素添加到元组列表中。

虽然这将工作,我想知道是否有更干净的方式来做到这一点?它不一定是一个元组列表。它只是需要文件的有序列表与标志

+0

感谢所有的建议。选项显然很多。我会和他们一起玩,看看有什么作用。只是澄清:文件将在每个周期后循环处理一些文件将被删除。在这个过程结束时,我会按照最适合最适合的顺序列出文件。 –

回答

0

为什么你不使用词典的词典将花费O操作访问一个元素都(1)

Dictionary<int,string> myFilesOrderedDict = new Dictionary<int,string>(); 

或者,如果你想通过一个int作为一个标志,你可以做逆组合文件,因为我不认为该文件的名称可以重复两次

像这样的事情
//字符串将是该文件的名称不

Dictionary<string ,int> myFilesOrderedDict = new Dictionary<string,int>(); 

希望这有助于

0

如果你有兴趣,在短短的迭代,然后一些复合类型的列表是要走的路 - 你可以使用自定义struct代替Tuple的,以增加可读性,或者如果您自定义class打算后面的标志是可变的,但总的想法是一样的。

您还可以使用Dictionary<string, int>的文件名作为标志;这有一个好处,它允许快速查找,如果你手头有一个文件名。

最后,考虑使用[Flags]enum而不是裸整数来保存所需的标志。

0

根据您以后如何使用数据,我会将文件名映射到整数(Dictionary<string, int>)或整数到文件。我假设两个文件可以具有相同的“标志”,所以我会使用Dictionary<int, List<string>>或构建IGrouping<int, string>ILookup<int, string>。令人遗憾的是,.NET BCL不包含可以像字典一样使用的简单可变Multimap(或Lookup)。

0

您可以创建一个anonymous type

var filesWithFlags = Directory.GetFiles(..) 
           .Select(f => new {File = f, Flags = 123}); 

,并使用结果是这样的:

foreach (var fileWithFlags in filesWithFlags) 
{ 
    DoSomethingWith(fileWithFlags.File); 
    AndDoSomethingWith(fileWithFlags.Flags); 
}