首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从文本文件中填充此词典?

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

Stack Overflow用户
提问于 2014-03-03 21:59:00
回答 1查看 1.6K关注 0票数 0

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

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

代码语言:javascript
运行
复制
Keyword1,Definition1
Keyword2,Definition2
Keyword3,Definition3
Keyword4,Definition4

等(共15行)

目前,我的字典是手动创建的,如下所示:

代码语言:javascript
运行
复制
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

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

代码语言:javascript
运行
复制
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):

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

再说一遍,我不知道该怎么做。上面的代码工作得很好,只是我不知道如何从文本文件中修改代码来填充字典,而不是上面我是如何做到的,因为我们需要从文本文件中包含关键字和定义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-03 22:06:43

也许我不理解你的问题,但只是把两者混合在一起就行了,不是吗?

代码语言:javascript
运行
复制
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可以移出您的循环。

霍普,这就是你的要求,它帮助你朝着正确的方向前进。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22158369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档