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

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 可以帮助你进行字符串和图片的配对。但一个好的方法是为您的对象创建一个 Class 【参考方案1】:

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

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;


注意:在智能手机上打字,所以没有保修,但我希望这个想法能清楚。

【讨论】:

以上是关于如何编写将图片与正确单词链接的列表代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写代码来自动完成单词和句子?

博客编写说明书

博客编写说明书

超详细博客入门编写教程

如何在 MySQL 选择查询中编写正则表达式?

分类列表自定义,与字段的唯一链接