написать mp3-плеер на С#, использовать словарь или массив для метаданных?

Я пишу mp3-плеер на С#, и мне интересно, как хранить метаданные для быстрого поиска. вот данные, которые мне нужно хранить для каждого отдельного файла:

  • местоположение файла
  • имя файла
  • художник
  • альбом
  • название трека
  • обложка альбома

как я должен хранить данные? словарь массивов? словарь словарей? Я хочу заполнить список отдельными записями, поэтому, если у меня есть кнопка с надписью «исполнитель», она быстро получит информацию об исполнителе, поместит ее в массив и заполнит список.


person darthwillard    schedule 02.07.2011    source источник


Ответы (3)


Как насчет общего списка?

// define song object.
public class Song 
{
    public string FileLocation { get; set; }
    public string FileName { get; set; }
    public string Artist { get; set; }
    public string Album { get; set; }
    public string TrackTitle { get; set; }
    public string AlbumArtwork { get; set; }
}

// create list of songs.
List<Song> songs = new List<Song>();

// add new song to list.
songs.Add(new Song {
        FileLocation = "/filepath/sade.mp3",
        FileName = "Sade", 
        Artist = "Sade", 
        Album = "Sade", 
        TrackTitle = "Smooth Operator", 
        AlbumArtwork "TBD"
});

// access first song in list.
Song song = songs[0];

// access property of song.
string trackTitle = song.TrackTitle;

Конечно, вы можете разбить это на еще более объектно-ориентированный дизайн, также сделав свойства песни сложными объектами. Например:

public class Album
{
    public string Name
    public DateTime ReleaseDate
    public string Artwork { get; set; }
}

public class Artist
{
    public string Name
    public List<Album> Albums
}

public class Song 
{
    public string FileLocation { get; set; }
    public string FileName { get; set; }
    public Artist Artist { get; set; }
    public string TrackTitle { get; set; }
}

А затем, например, получить доступ к свойствам альбома следующим образом:

string firstAlbumName = song.Artist.Albums[0].Name;
person Kon    schedule 02.07.2011
comment
будет ли sql быстрее получать доступ к метаданным или списку? у меня есть около ‹200k песен для доступа. кажется, что использование list было бы более простым решением, но sql был бы наиболее эффективным. я мало что знаю о sql, и мне было бы быстрее внедрить вышеприведенный класс, чем сидеть и учить sql. решения, решения...... - person darthwillard; 02.07.2011
comment
Ну, вы, вероятно, должны использовать оба. Храните все свои данные в базе данных. Затем извлеките соответствующие данные (на основе некоторых критериев поиска) и заполните объекты песни и список этими данными. Тогда вам будет намного проще работать с этими объектами и представлять их на внешнем интерфейсе по своему усмотрению. - person Kon; 02.07.2011
comment
Я рассмотрел только объектную/модельную часть решения, а не часть базы данных, потому что предположил, что вы спрашиваете, как хранить свои песни в памяти (в краткосрочной перспективе), а не в долгосрочной перспективе на диске. - person Kon; 02.07.2011
comment
да, я понимаю эту часть. есть ли простой пример для чтения/записи sql из С#? благодаря. Я использую визуальную студию 2010. - person darthwillard; 02.07.2011
comment
Ознакомьтесь с примерами здесь: msdn.microsoft.com/en -us/library/ Я также большой поклонник Entity Framework: weblogs.asp.net/scottgu/archive/2010/07/16/ - person Kon; 02.07.2011
comment
Спасибо за это. второй кажется очень полезным. есть ли руководство для чайников по настройке простой базы данных sql? - person darthwillard; 02.07.2011

Кажется, там нет ничего, что могло бы повлиять на хранение, я бы сказал «список классов», то есть List<Track> или аналогичный, с

public class Track {
    public string Path {get;set;}
    ...
    public string Title {get;set;}
    public string ArtworkPath {get;set;}
}

Если объем большой, возможно, вы захотите просмотреть базы данных, а не хранилище в оперативной памяти. Например, SQL Server (Express или Compact) бесплатны. Это может позволить более специализированное индексирование без особых усилий, а также предустановленное постоянство.

person Marc Gravell    schedule 02.07.2011

Лучший способ хранения ваших данных — в базе данных, существуют различные типы небольших бесплатных баз данных на выбор. Например, sqlite хорош. Вы можете использовать sql для быстрого доступа к данным (поиск, группировка и т.д.).

person Peter    schedule 02.07.2011