如何编写将图片与正确单词链接的列表代码?
Posted
技术标签:
【中文标题】如何编写将图片与正确单词链接的列表代码?【英文标题】:how to write list code that links a picture with a correct word? 【发布时间】:2019-05-24 05:07:13 【问题描述】:我正在尝试制作一个图片游戏测验 - 游戏的核心机制是从 4 个选项中选择正确的图片来匹配给定的单词。我一直在尝试使用数组/列表将图片与单词配对。但不知道如何。需要一个英雄来帮助我!我对统一很陌生,所以我只需要一个指南:)
public class listtest : MonoBehaviour
public List<GameObject> vp = new List<GameObject>();
public List<string> word = new List<string>();
最终结果或许应该至少显示配对匹配。
【问题讨论】:
Dictionary假设您的列表顺序正确并且大小完全相同
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;
注意:在智能手机上打字,所以没有保修,但我希望这个想法能清楚。
【讨论】:
以上是关于如何编写将图片与正确单词链接的列表代码?的主要内容,如果未能解决你的问题,请参考以下文章