Коллекция .NET необходима для хранения путей к файлам и расширений - PullRequest
0 голосов
/ 19 февраля 2011

У меня огромное количество путей к файлам и расширений файлов:

  • Каждый путь к файлу имеет ровно одно расширение, связанное с ним.
  • Каждое расширение имеет одинили больше путей к файлам, связанных с ним.
  • Пути уникальны, расширения не являются.

Моя цель - легко получить все пути к файлам, связанные с данным файломрасширение.

Например, если я спрашиваю "mp3", я бы хотел знать все пути к файлам с таким расширением.

Теперь мой вопрос: какиеКоллекция C # я должен использовать, чтобы оптимально сделать это, и как я должен использовать эту коллекцию?

Ответы [ 3 ]

5 голосов
/ 19 февраля 2011

Я бы использовал Dictionary<string, List<string>>, где ключом будет расширение (например, "mp3"), которое будет возвращать список путей к файлам типа .mp3.

Если вы можете использовать LINQ, вы можете использовать один List<string> и извлекать пути к файлам, связанные с определенным расширением файла, например:

List<string> s = new List<string>();
s.Add("c:\\documents and settings\\sound1.mp3");
s.Add("c:\\documents and settings\\sound2.mp3");
s.Add("c:\\documents and settings\\sound3.mp3");
s.Add("c:\\documents and settings\\something1.wav");
s.Add("c:\\documents and settings\\something2.exe");
s.Add("c:\\documents and settings\\abc.MP3");

var mp3paths = s.Where(x => String.Compare(".mp3", Path.GetExtension(x), true) == 0);
var exepaths = s.Where(x => String.Compare(".exe", Path.GetExtension(x), true) == 0);
2 голосов
/ 19 февраля 2011

Альтернативой уже упомянутому словарю является Lookup , если , коллекция должна быть установлена ​​только один раз, и вы хотите, чтобы она была неизменной:

var myLookup = new DirectoryInfo(@"D:\samples").GetFiles()
                   .ToLookup(f => f.Extension);
var videoFiles = myLookup[".wmv"].ToList();
2 голосов
/ 19 февраля 2011

Если вы просто ищете контейнер для хранения всех ваших расширений и путей к файлам, я бы предложил Dictionary (в частности, Dictionary<string, List<string>>).

Таким образом, вы можете хранитьсписок строк (то есть список путей к файлам) для каждого расширения файла.

var dictionary = new Dictionary<string, List<string>>();
dictionary.Add("exe", new List<string>());
dictionary["exe"].Add("C:\Test\MyApp.exe");
dictionary["exe"].Add("C:\Test\AnotherApp.exe");
//Etc...

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...