0

我刚刚开始在 Visual Studio 2010 中进行我的第一个编程项目。

我有一个已作为项目添加到程序中的 XML 文件。它具有以下结构:

<lexeme><grapheme>Aalesund</grapheme>    <phoneme>'A:lI2s,Vnd</phoneme></lexeme>

有 400,000 个这样的条目,我想做的是在按下按钮时从 xml 文件中选择一个随机的词素,然后用相应的字素和音素填充两个标签。

有人能指出我开始的正确方向吗?我发现的教程用于加载特定数量的数据,而不仅仅是一个随机行并引用外部 xml 文件位置,而不是项目内部的一个。

提前致谢。

编辑:我应该说我的意思是伪随机数。我希望找到一个 rand() 函数,但似乎找不到?

4

1 回答 1

1

没有从 XML 中获取随机行的直接方法。依赖行号是危险的,因为如果要更改 XML 的格式:

<lexeme><grapheme>Aalesund</grapheme>    <phoneme>'A:lI2s,Vnd</phoneme></lexeme>

至:

<lexeme>
  <grapheme>Aalesund</grapheme>    
  <phoneme>'A:lI2s,Vnd</phoneme>
</lexeme>

您随机生成的行号可能不再与<lexeme>元素对齐。

我认为最好的方法是获取<lexeme>列表中的所有元素并随机生成列表范围内的数字:(请
原谅我,但代码示例是在 c# 中,我不相信我的VB.Net 足以在 VB 中编写我的代码)

var lexemeList = xDocument.Descendants("lexeme").ToList();
var random = new Random();

var randomLexeme = lexemeList[random.Next(0, lexemeList.Count-1)];

randomLexme然后将有一个伪随机<lexeme>元素,您可以根据需要对其进行解析以获取适当的<grapheme><phoneme>元素。

但是,如果您这样做,请记住 .netRandom类是伪随机的,并且使用当前时间戳作为种子。如果您要定期访问对象,建议将var random = new Random()变量设为类级字段并创建一次,然后使用该Next()方法获取下一个数字,而不是Random()在需要随机数时创建新对象.

这是 VB.Net 中一个更独立的函数:

Dim rand = New Random()
Dim myXml = New XDocument()

Function GetRandomLexeme() as XElement

    Dim lexemeList = myXml.Descendants("lexeme").ToList()
    Dim randomLexeme = lexemeList(rand .Next(0, lexemeList.Count - 1))

    GetRandomLexeme = randomLexeme

End Function
于 2013-02-09T20:17:03.677 回答