对于Unity游戏,我尝试解析文本文件并将游戏配置存储到键/值的SortedList中,其中键是要素的名称,值是存储在中的要素值他们各自的名单。
例如文本文件的片段:
Feature1 String Sphere Cube Cylinder
Feature2 Vector4 (0,0,0,255) (255,0,0,0)
Feature3 Int32 2
...
如何创建一个存储这些功能的SortedList,我可以通过索引轻松访问它们?
例如:
SortedList[0].Key would return Feature1
SortedList[0].Value would return a list that contains Sphere, Cube, Cylinder
------我已编辑为附加我当前的代码以获得更好的背景------
我在提出问题之前的当前解决方案是创建一个SortedList,这样当我添加一个新条目时,值列表可以是任何数据类型。但是,当我开始使用和访问SortedList时,它需要做很多工作,因为我需要将列表内部转换为正确的集合类型。从长远来看,我不认为这是有效和恰当的。
使用排序列表有更好的方法吗?或者我应该使用不同的数据结构来实现它?
public static SortedList<String, IList> sortedList = new SortedList<String, IList>();
foreach (KeyValuePair<string, IList> data in sortedList) {
if (data.Key == "Feature1") {
listShapesSuperblock = new List<string> (data.Value.Cast<string>().ToList());
}
if (data.Key == "Feature2") {
listColorsSuperblock = new List<Vector4> (data.Value.Cast<Vector4>().ToList());
}
if (data.Key == "Feature3") {
listContextsSuperblock = new List<Vector4> (data.Value.Cast<Vector4>().ToList());
}
}
答案 0 :(得分:2)
我的建议是使用类结构来访问配置设置。如果使用json / xml格式,则可以将设置反序列化到类中,并以安全的方式在代码中访问它们。
设置类:
class Settings
{
public List<string> shapes { get; set; }
public List<Vector> vectors { get; set; }
}
文字档案:
{
shapes: ["sphere", "cube"]
}
用法:
var settings = new JavaScriptSerializer().Deserialize<Settings>(readTextFile);
string firstShape = settings.shapes.FirstOrDefault();
答案 1 :(得分:0)
如果不将列表转换为对象集合,则无法在C#中执行此操作。
基本上这听起来像是一个典型的内存缓存,它将值表示为一个对象,您必须自己将其转换回相应的类型。
如果每个值都是一个集合,那么您可以将其表示为IEnumerable<object>
或仅object
的排序列表:
var sortedList = new SortedList<string, IEnumerable<object>>();
var sortedList = new SortedList<string, object>();
我更喜欢后者,因为它更容易处理。