增加列表中的维度

时间:2013-11-28 22:31:20

标签: c# list

使用......

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

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

虽然这样可行,但我想知道是否有更清洁的方法可以做到这一点?它不必是元组列表。它只需要是带有标志的文件的有序列表

4 个答案:

答案 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);
}