热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在C#中开发MP3播放器时,如何选择字典或数组来处理元数据?

在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。

i'm writing an mp3 player in c#, and i'm wondering how to store the metadata for quick retrieval. here's the data i need to store for each individual file:

我正在用c#编写一个mp3播放器,我想知道如何存储元数据以便快速检索。这是我需要为每个文件存储的数据:

  • file location
  • file name
  • artist
  • album
  • track title
  • album artwork

how should i store the data? dictionary of arrays? dictionary of dictionaries? i want to populate a listbox with individual entries, so if i have a button that says artist, it will quickly get the artist info, put it in an array and populate the listbox.

我该如何存储数据?数组字典?词典词典?我想填充一个包含单个条目的列表框,所以如果我有一个说艺术家的按钮,它将快速获取艺术家信息,将其放入数组并填充列表框。

3 个解决方案

#1


2  

How about a generic list?

通用列表怎么样?

// 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 sOngs= new List();

// 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;

Of course you could break this down into an even more object-oriented design by making the song properties complex objects as well. For example:

当然,通过使歌曲属性也成为复杂的对象,你可以将其分解为更加面向对象的设计。例如:

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

public class Artist
{
    public string Name
    public List Albums
}

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

And then, for example, access the album properties like this:

然后,例如,访问相册属性,如下所示:

string firstAlbumName = song.Artist.Albums[0].Name;

#2


1  

There doesn't seem to be anything there that would influence storage, do I would say "a list of classes", i.e. a List or similar, with

似乎没有什么会影响存储,我会说“类列表”,即List 或类似的,与

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

If the volume is high, you might want to look at databases rather than in-memory storage. SQL Server (Express or Compact) for example, are both free. This may allow for more specialised indexing without much effort, plus pre-built persistence.

如果卷很高,您可能需要查看数据库而不是内存存储。例如,SQL Server(Express或Compact)都是免费的。这可以允许更加专业化的索引而不需要太多努力,以及预先构建的持久性。

#3


1  

The best way to store your data is in a database, there are different types a small free database to choose from. For example sqlite is nice. You can use sql for fast access of of the data (searching, grouping, etc).

存储数据的最佳方式是在数据库中,有不同类型的小型免费数据库可供选择。例如sqlite很好。您可以使用sql快速访问数据(搜索,分组等)。


推荐阅读
  • sqlserver动态分区方案例子
    sqlserver动态分区方案例子当我们存储的数据量比较大时,比如超过千万,上亿级别时单纯的使用索引可能效果不明显了,此时我们可以考虑采 ... [详细]
  • 深入理解SQL Server中的聚集与非聚集索引
    本文探讨了SQL Server数据库中两种主要的索引类型——聚集索引和非聚集索引,通过对比分析它们的特点及应用场景,旨在帮助读者更好地理解和利用这两种索引以优化查询性能。 ... [详细]
  • 本文介绍了解决在Windows操作系统或SQL Server Management Studio (SSMS) 中遇到的“microsoft.ACE.oledb.12.0”提供程序未注册问题的方法,特别针对Access Database Engine组件的安装。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文档介绍了如何在Visual Studio 2010环境下,利用C#语言连接SQL Server 2008数据库,并实现基本的数据操作,如增删改查等功能。通过构建一个面向对象的数据库工具类,简化了数据库操作流程。 ... [详细]
  • 如何在SQL Server 2008中通过Profiler跟踪特定数据库及获取客户端信息
    本文介绍如何利用SQL Server Profiler工具来监控特定数据库的操作,并获取执行这些操作的客户端计算机名和账户名。步骤包括创建新的跟踪、配置跟踪属性以及设置列筛选器以精确过滤数据。 ... [详细]
  • Flask框架下MySQL数据库的集成与应用
    本文详细探讨了如何在Flask框架中集成和使用MySQL数据库,通过具体的实例和代码演示,帮助开发者更好地理解和掌握Flask与MySQL的结合使用。 ... [详细]
  • DataList内容详解
    DataList是另一种显示数据控件,它与GridView不同的是,它全部使用模板进行设计,并且DataList的模板是对整行设置 ... [详细]
  • linq操作符:分组操作符
    分组是根据一个特定的值将序列中的元素进行分组。LINQ只包含一个分组操作符:GroupBy。GroupBy操作符类似于T-SQL语言中的GroupBy语句。来看看GroupBy的方 ... [详细]
  • 本文探讨了如何在SQL中实现动态列的Pivot查询,通过具体的代码示例和专业书籍推荐,帮助读者理解和掌握这一技术。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 深入解析Android中的SQLite数据库使用
    本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。 ... [详细]
  • 本文总结了MySQL的一些实用技巧,包括查询版本、修改字段属性、添加自动增长字段、备份与恢复数据库等操作,并提供了一些常见的SQL语句示例。 ... [详细]
author-avatar
The-6ixth-Floor乐队
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有