使用......
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将groupfile作为标志,你可以做反过来,因为我不认为文件的名称可以重复两次
像这样的东西 // string将是文件的名称
Dictionary<string ,int> myFilesOrderedDict = new Dictionary<string,int>();
希望这个帮助
答案 1 :(得分:0)
如果您对迭代感兴趣,那么可以使用一些复合类型列表 - 您可以使用自定义struct
代替Tuple
来提高可读性或自定义{{ 1}}如果你打算以后标志是可变的,但总的想法是一样的。
您还可以使用class
个文件名来标记;这样做的好处是,如果您手头有文件名,它可以快速查找。
最后,考虑使用[Flags]
Dictionary<string, int>
而不是裸整数来保存您需要的标记。
答案 2 :(得分:0)
根据您以后如何使用数据,我会将文件名映射到整数(Dictionary<string, int>
)或整数映射到文件。我假设两个文件可以具有相同的“标志”,因此我将使用Dictionary<int, List<string>>
或构造IGrouping<int, string>
或ILookup<int, string>
。遗憾的是,.NET BCL不包含可以像字典一样使用的直接可变多图(或查找)。
答案 3 :(得分: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);
}