如何创建将不同数据类型的列表存储为值的排序列表

本文关键字:列表 数据类型 存储 排序 何创建 创建 | 更新日期: 2023-09-27 18:32:23

对于 Unity 游戏,我正在尝试解析文本文件并将游戏配置存储到键/值的排序列表中,其中键是功能的名称,值是存储在各自列表中的功能值。

例如,文本文件的片段:

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());
    }
}

如何创建将不同数据类型的列表存储为值的排序列表

我的建议是使用类结构来访问配置设置。如果使用 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();

如果不将列表强制转换为对象集合,则无法在 C# 中执行此操作。

基本上,这听起来像一个典型的内存缓存,它将值表示为一个对象,您必须自己将其转换回适当的类型。

如果每个值都是一个集合,那么您可以将其表示为IEnumerable<object>的排序列表或仅表示object

var sortedList = new SortedList<string, IEnumerable<object>>(); var sortedList = new SortedList<string, object>();

我更喜欢后者,因为它更容易处理。