0

VisualStudio2010での最初のプログラミングプロジェクトの1つを始めたばかりです。

プログラムにアイテムとして追加したXMLファイルがあります。次の構造になっています。

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

そのようなエントリは400,000あります。ボタンを押すと、xmlファイルからランダムな語彙素が選択され、2つのラベルに対応する書記素と音素が入力されます。

誰かが私を正しい方向に向けてください。私が見つけたチュートリアルは、ランダムな1行だけでなく、特定の量のデータをロードし、プロジェクトの内部ではなく、外部の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でコードを書くのに十分なVB.Net)

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 に答える