1. 存放所有缓存的字典对象
新的缓存方式也不复杂,也是新建一个缓存类:
- public class CsvDataCached_Higher
- {
- /// <summary>
- /// 存放所有CSV数据缓存
- /// </summary>
- public static Dictionary<Type, object> csvDatas = new Dictionary<Type, object>();
- static CsvDataCached_Higher()
- {
- /* 读取并缓存CSV配置数据 */
- csvDatas[typeof(CSVDemo)] = LoadCsvData<CSVDemo>(Application.streamingAssetsPath + "/CSVDemo.csv");
- }
- private static Dictionary<int, T_CsvData> LoadCsvData<T_CsvData>(string csvFilePath)
- {
- }
- public static Dictionary<string, Dictionary<string, string>> LoadCsvFile(string filePath)
- {
- }
- }
LoadCsvData和LoadCsvFile和之前是一样的,没有改动,我就不贴出来了。
重点是csvDatas属性,是一个字典,key值是Type类型的对象,value值是object对象。
Type类型即为我们的CSVDemo对象的类型,object对象则保存了CSV文件读取后的数据对象。
这个属性有点复杂,可能一时觉得有点别扭。
2. 获取缓存文件的函数
为了方便地获取csvDatas里的对象,我们还需要写1个函数:
- /// <summary>
- /// 获取某个CSV文件的所有数据,返回字典集合,Key为ID,Value为每一行的数据对象
- /// </summary>
- /// <typeparam name="T_CsvData">文件数据类型</typeparam>
- /// <returns></returns>
- public static Dictionary<int, T_CsvData> GetCsvFileDatas<T_CsvData>()
- {
- Type type = typeof(T_CsvData);
- if (csvDatas.ContainsKey(type) == true)
- {
- /* 取出存放该数据对象类型的字典 */
- object dicObj = csvDatas[type];
- return (Dictionary<int, T_CsvData>)dicObj;
- }
- return new Dictionary < int, T_CsvData >() ;
- }
GetCsvFileDatas函数用于从csvDatas属性里获取某个CSV文件的数据对象,用法如下:
- Dictionary<int, CSVDemo> csvDemoDic = CsvDataCached_Higher.GetCsvFileDatas<CSVDemo>();
于是,这种缓存方式,对于改动是比较友好的,每次新增CSV文件时,我们只需要在静态构造器里多缓存一个类型的数据就可以了。
但是,在读取缓存的时候,可能不是很直观,大家看自己的需求了。
3. 获取CSV数据缓存的某一行内容
我们还可以再加一个函数,直接获取某一行的内容:
- /// <summary>
- /// 获取CSV数据对象
- /// </summary>
- /// <typeparam name="T_CsvData">数据对象类型(如MonsterCsvData)</typeparam>
- /// <param name="ID">配置ID</param>
- /// <returns>CSV文件某一行内容的数据对象</returns>
- public static T_CsvData GetCsvLineData<T_CsvData>(int ID)
- {
- Type type = typeof(T_CsvData);
- /* 取出存放该数据对象类型的字典 */
- Dictionary<int, T_CsvData> dic = GetCsvFileDatas<T_CsvData>();
- /* 从字典中取出某个ID的数据 */
- if (dic.ContainsKey(ID) == true)
- {
- return dic[ID];
- }
- return default(T_CsvData);
- }
- /* 从缓存读取文件 */
- CSVDemo csvData = CsvDataCached_Higher.GetCsvLineData<CSVDemo>(2);
- /* 测试读取ID为2的数据 */
- Debug.Log("ID=" + csvData.ID + ",Name=" + csvData.Name);
4.结束
好了,关于CSV的高级缓存方式就介绍到这里。
同时,关于CSV的缓存读取教程也到此为止了。
这是木头这么久以来都在用的代码(当然也一直在优化),但难免有一些思维固定了,可能关于CSV的缓存和读取会有更方便、更优秀的方式,如果你有的话,希望能留言给我一些建议。