我如何从两个列表中创建一个字典,这与iOS和其他Unity平台兼容

本文关键字:iOS 这与 其他 Unity 字典 平台 创建 两个 列表 一个 | 更新日期: 2023-09-27 18:19:22

我在一些Unity文档中读到Dictionary是不可序列化的,所以不能从编辑器修改。提示使用两个List,然后使用它们来创建Dictionary:

提示:Unity不会序列化Dictionary,但是你可以存储一个List<>表示键,List<>表示值,并将它们缝在non中

然而,我似乎找不到这样做的文档。到目前为止,我有以下内容:

public List<string> someKeys;
public List<Sprite> someValues;
private void Awake()
{
    someDictionary = new Dictionary<string, Sprite>();
}

someKeyssomeValues在Unity编辑器中设置和填充相同数量的元素。当然,someKeys中的元素0是someValues中元素0的键,其他键也是如此。如何使用它们来创建someDictionary中的键和值?

Update:我从重复标记中看到,这已经用Linq回答了,作为c#的新手,我还没有使用过,但肯定似乎可以完成这项工作。但这在Unity中是否安全,特别是在运行iOS的设备上?此外,这种方法是否更好(即更快和/或被认为比使用标准for循环更好)?

注意:我想通过键访问someValues中的Sprite s,而不是通过数字索引。

我如何从两个列表中创建一个字典,这与iOS和其他Unity平台兼容

Dictionary类是一个泛型类,第一个类型参数对应于键的类型,第二个类型参数对应于值的类型。

所以字典应该是这样的:Dictionary<string, Sprite>

然后,可以使用Dictionary.Add(key, value)方法添加(Key, Value)对

那么这里,你将有:

for (int numItem = 0; numItem < someKeys.Count; numItem++)
    dictionary.Add(someKeys[numItem], somevalues[numItem]);

但首先要确保someKeys.Count == someValues.Count

你也可以使用LINQ,但似乎iOS对LINQ的支持有限(参见在构建iOS时使用LINQ - Unity Answers)