如何从文本文件中填充此字典?

时间:2014-03-03 21:59:00

标签: vb.net dictionary

我正在为我的计算机科学课进行测验,基本概念是你有15个关键词和15个定义。所有这些都需要随机显示,并且必须出现正确的答案。用户必须将正确的定义与关键字匹配两次,然后再次不显示该关键字和定义。当所有人都被回答两次时,测验就结束了。

我已将我的关键字和我的定义存储在同一个文件中,因此它们不会失去同步。文本文件如下所示:

Keyword1,Definition1
Keyword2,Definition2
Keyword3,Definition3
Keyword4,Definition4

等(总共15行)

目前,我手动创建的词典如下:

Const NUMBER_OF_ANSWERS As Integer = 3
Public Class Form1

Dim kv As New Dictionary(Of String, String)

    kv.Add("Keyword1", "Definition1")
    kv.Add("Keyword2", "Definition2")
    kv.Add("Keyword3", "Definition3")
    kv.Add("Keyword4", "Definition4")
    kv.Add("Keyword5", "Definition5")
    kv.Add("Keyword6", "Definition6")
    kv.Add("Keyword7", "Definition7")
    kv.Add("Keyword8", "Definition8")
    kv.Add("Keyword9", "Definition9")
    kv.Add("Keyword10", "Definition10")
    kv.Add("Keyword11", "Definition11")
    kv.Add("Keyword12", "Definition12")
    kv.Add("Keyword13", "Definition13")
    kv.Add("Keyword14", "Definition14")
    kv.Add("Keyword15", "Definition15")

    Dim r As New Random
    Dim kvRandom As List(Of KeyValuePair(Of String, String)) =
      kv.OrderBy(Function() r.Next).ToList

    'questions will appear in random order
    For Each line As KeyValuePair(Of String, String) In kvRandom
        Dim keyword As String = line.Key
        Dim correctDefinition As String = line.Value

        Dim keywords As New List(Of String)
        keywords.Add(keyword)
        keywords.AddRange(kv.Keys.Except({keyword}).
          OrderBy(Function() r.Next).Take(NUMBER_OF_ANSWERS - 1))

        Dim definitionsRandom As List(Of String) =
          keywords.Select(Function(x) kv(x)).OrderBy(Function() r.Next).ToList

        'TODO: need to write some code here
        'display keyword and three possible definitions to the user
        '(out of which one is correct)
        'answers will also appear in random order
        'Check answer against value stored in "correctDefinition"

        LabelKeyword.Text = keyword
        RadioButtonDef1.Text = definitionsRandom(0)
        RadioButtonDef2.Text = definitionsRandom(1)
        RadioButtonDef3.Text = definitionsRandom(2)
    Next

End Sub

我知道要从文本文件填充字典,我会执行以下操作:

For Each line As String In IO.File.ReadAllLines("keywords_and_definitions.txt")


 Dim parts() As String = line.Split(",")
  kv.Add(parts(0), parts(1))
Next

但是我不知道如何更改此代码以成功实现此功能。感谢此前的帮助,我被告知这样做(@Neolisk):

  

将进度变量设置为0(14)(问题数减去1,基于VB.NET的索引为零)。在第一个问题,显示问题#0,当用户按下Next时,增加进度变量。不要忘记计算有效/无效的答案。您可能希望存储用户的完整答案历史记录。如果你需要这个模式的详细信息,我认为值得提出一个单独的问题 - 提供你需要的功能。

我再也不知道如何去做。上面的代码工作奇怪它只是我不知道如何更改代码从文本文件填充字典而不是我如何在上面完成它,因为它要求我们从文本文件中包含我们的关键字和定义。

1 个答案:

答案 0 :(得分:1)

也许我不理解你的问题,但只是将两者混合在一起应该可以解决问题,不是吗?

Const NUMBER_OF_ANSWERS As Integer = 3
Public Class Form1

Dim kv As New Dictionary(Of String, String)

For Each line As String In IO.File.ReadAllLines("keywords_and_definitions.txt")
  Dim parts() As String = line.Split(",")
  kv.Add(parts(0), parts(1))
Next

Dim r As New Random
...

或者我不理解你的问题?

另外,我会给你提示,因为这是作业,Dim parts() As String可以移到你的循环之外。

跳到这就是你所要求的,它有助于让你朝着正确的方向前进