检查字典的多个值以验证答案

时间:2018-09-02 20:11:52

标签: c# unity3d

我设法创建了一个输入字段,该字段可以通过创建另一个文本字段并将其链接到所述问题来对一个问题进行检查和验证,因此例如,如果问题的值为“ 1”,则答案将是为“ 1”。然后,我进行了文本比较,以便如果用户写的内容=该文本字段,答案将是正确的。 但是,我意识到有时候有人可以写点别的东西。例如,在“您如何看待老虎”这个问题中,不仅有一个可能的答案。因此,我对输入字段所做的操作不完全有效(是吗?)。

我做了很多研究,发现了词典,但是由于它们只有一个关键值而无济于事,然后我发现了列表,这可能吗?

所以我的问题是,是否有可能以及如何创建一个整数值的列表,该列表以某种方式链接到总体问题的值,因此,如果随机值为1,则列表值也为1,然后检查写入的内容是否与该随机值的答案相匹配。

如果我刚才说的没有道理,请举个例子:

当前行为:

  

调查:你喜欢猫吗?

     

输入字段:是的

     

隐藏文本字段:是的,我

     

输入字段=隐藏的文本字段,因此是正确的

理想行为:

  

调查:你喜欢猫吗?

     

输入字段:我喜欢猫

     

可能的答案:我喜欢猫,是的,等等。

     

“输入字段”在列表中包含与问题匹配的答案,因此是正确的。

我以为您可以使用.Contains函数,但是我不知道如何将它们链接在一起。

编辑:

我试图通过创建字典和搜索键来解决此问题(我认为这是正确的方法),但是由于某种原因,此代码甚至在检查时也不起作用? (就像.containsKey函数不起作用一样?)

public string questions = "hi;weird;by";
Dictionary<int, string> tester = new Dictionary<int, string>();

// Use this for initialization
void Start () 
{     
    tester.Add(1, questions);
    tester.Add(2, "hello");
    tester.Add(3, "by");
    tester.Add(4, "hi");
    tester.Add(5, "bye");
}

// Update is called once per frame
void Update () 
{       
}

public void hello ()
{
    if(tester.ContainsKey(2))
    {
        string value = tester[2];
        Debug.Log("Correct");
    }
}

编辑1:

按照traaster0X的说明,我尝试通过在主摄像机中包含字典脚本并在输入字段中包含脚本来完成此操作,但是由于某些原因,在加载时在控制台上没有任何作用:

列表

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Linq;

public class Listpractice : MonoBehaviour 
{
    Dictionary<int, List<string>> tester = new Dictionary<int, List<string>>();
    List<string> possibleAnswersToQuestionZero = new List<string>(); 

    // Use this for initialization
    void Start () {

        possibleAnswersToQuestionZero.Add("Hello");
        possibleAnswersToQuestionZero.Add("By");
        tester.Add(0, possibleAnswersToQuestionZero);     
    }

    // Update is called once per frame
    void Update ()
    {       
    }

    public void hello ()
    {
        var toCheck = tester[0].FirstOrDefault(x => x == GameController.hello);

        if (toCheck != null)
        {
            Debug.Log("Hi!");
        }
    } 

}

输入字段

public class QAClass07
{
    public string Answer = "";
    public string Question = "";
    QAClass07 result = new QAClass07();        
}

public static string hello;   

void Start()
{
  GameObject a = gameObject;   
  hello = a.transform.Find("Text").GetComponent<Text>().text;
}

// registers what the user writes 
public void getInput(string guess)
{        
    // Does something assuming someone enters something
    if (GetComponent<InputField>() != null)
    {
        hello = GetComponentInChildren<Text>().text;
    }              
}

2 个答案:

答案 0 :(得分:1)

只需使用Dictionary<int, List<string>>,然后将所有答案添加到相应的问题ID。

var questions = new List<string> { "hi", "weird", "by" };
var tester = new Dictionary<int, List<string>>();

// Use this for initialization
void Start () 
{     
    tester.Add(1, questions);
    tester.Add(2, new List<string> { "hello" });
    tester.Add(3, new List<string> { "by" });
    tester.Add(4, new List<string> { "hi" });
    tester.Add(5, new List<string> { "bye" });
}


public void hello ()
{
    if(tester.ContainsKey(2))
    {
        var answers = tester[2] ?? new List<string>();
        // now you have all answers linked to question with id 2 in answers variable
    }
}

答案 1 :(得分:1)

  

“我做了很多研究,发现了词典,但是由于它们只有一个关键值而无济于事,所以我发现了列表,这可能吗?”

是的,Dictionary<TKey, TValue>确实由特定类型的键值对组成;您可以将其键的类型声明为int(对应于当前询问的问题的索引),并将其值的类型声明为List<string>,以保存该问题的可能答案。

// key is question index, value is a list of possible answers for that question
var dictionary = new Dictionary<int, List<string>>();

// list of possible answers for question 0 (random question number chosen for the example)
var possibleAnswersToQuestionZero = new List<string>(); 
possibleAnswersToQuestionZero.Add("Possible Answer to question 0");
possibleAnswersToQuestionZero.Add("Another possible answer to question 0");

// add that list to the dictionary at key 0.
// you should be also checking if the key exists before trying to access it's value, 
// and what happens if the list returned for that key is null or empty.
dictionary.Add(0, possibleAnswersToQuestionZero);

要检查用户针对问题userInput提交的答案(假设已将其保存在名为0的变量中),我们可以这样做:

// check if the list at dictionary[0] has at least one instance of userInput,
// otherwise return null
var toCheck = dictionary[0].FirstOrDefault(x => x == userInput);

// if the result is not null, the answer was found 
if (toCheck != null)
{
    // answer found
}