gpt4 book ai didi

c# - 如何编写将图片与正确单词链接起来的列表代码?

转载 作者:行者123 更新时间:2023-11-30 21:28:35 24 4
gpt4 key购买 nike

我正在尝试制作图片游戏测验 - 游戏的核心机制是从 4 个选项中选择正确的图片以匹配给定的单词。我一直在尝试使用数组/列表将图片与单词配对。但不知道如何。需要大侠帮帮我!!我对 Unity 很陌生,所以我只需要一个指南 :)

public class listtest : MonoBehaviour
{
public List<GameObject> vp = new List<GameObject>();
public List<string> word = new List<string>();
}

最终结果或许至少应该显示配对匹配。

最佳答案

假设您的列表顺序正确并且大小与您可以做的完全相同

public Dictionary<string, GameObject> ImageByString = new Dictionary<string, GameObject>();
public Dictionary<GameObject, string> StringByImage = new Dictionary<GameObject, string>();

private void Start()
{
// at least have an "emergency" check and use the smaller list count
var count = Mathf.Min(vp.Count, word.Count);

for(var i = 0; i < count; i++)
{
ImageByString.Add(word[i], vp[i]);
StringByImage.Add(vp[i], word[i]);
}
}

或使用 Linq

using System.Linq;

...

private void Start()
{
ImageByString = word.Zip(vp, (k, v) => new {k, v}).ToDictionary(x => x.k, x => x.v);
StringByImage = vp.Zip(word, (k, v) => new {k, v}).ToDictionary(x => x.k, x => x.v);
}

但是,这不会显示在 Unity Inspector 中。如果你想实现这一点,你应该实现你自己的类,比如

[Serializable]
public class WordImagePair
{
public string word;
public GameObject vp;
}

然后您必须“相信”所有 word 值都是唯一的,因此您可以简单地做

public List<WordImagePair> pairs = new List<WordImagePair>();

现在要么再次使用字典

public Dictionary<string, GameObject> ImageByString = new Dictionary<string, GameObject>();
public Dictionary<GameObject, string> StringByImage = new Dictionary<GameObject, string>();

private void Start()
{
foreach(var pair in pairs)
{
ImageByString.Add(pair.word, pair.vp);
StringByImage.Add(pair.vp, pair.word);
}
}

或者再次使用 Linq

private void Start()
{
ImageByString = pairs.ToDictionary(p => p.word, p => p.vp);
StringByImage = pairs.ToDictionary(p => p.vp, P => p.word);
}

或稍后直接使用 Linq 以访问像这样的图像

public GameObject ImageByString(string word)
{
var output = pairs.FirstOrDefault(p => string.Equals(p.word, word));

if(output == null)
{
Debug.LogErrorFormat(this, "No Image with word=\"{0}\" found!", word);
}

return output;
}

public string StringByImage(GameObject vp)
{
var output = pairs.FirstOrDefault(p => p.vp == vp);

if(output == null)
{
Debug.LogErrorFormat(this, "No word for given GameObject {0} found!", vp.name);
}

return output;
}

注意:在智能手机上打字,因此不提供任何保证,但我希望思路清晰。

关于c# - 如何编写将图片与正确单词链接起来的列表代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56286171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com