1

我有一个 XML 文件,我从中解析一些内容以显示在列表中:

班级:

public class SampleClass 
{
    public string Sample {get; set;}    
    public string Definite {get; set;}
    public string Random {get; set;}
}

XML 文件示例:

<Question>
    <Sample>This is sample 1</Sample>
    <Definite>Answer 1</Definite>
</Question>

<Question>
    <Sample>This is sample 2</Sample>
    <Definite>Answer 2</Definite>
</Question>
...

目前,我正在轻松解析列表中的内容并制作此列表。

_list = xmlDoc.Descendants("Question")
              .Select(
                  q => new SampleClass 
                  { 
                      Sample = q.Element("Sample").Value, 
                      Definite = q.Element("Definite").Value
                  })
              .ToList();

但是,在列表中,我想包含另一个要从 XML 文件中以随机顺序解析的元素,例如:

SampleClass list   Sample        Definite   Random 
                      ^              ^        ^ 
List element 1: This is sample 1, Answer 1, Answer5
List element 2: This is sample 2, Answer 2, Answer1
List element 3: This is sample 3, Answer 3, Answer4 ...

我想问一下如何Random在解析时将这个元素包含在列表中,以便从节点中q.Random随机分配一个?<Definite> Value </Definite>Question

列表中的随机副本是不可接受的。

4

2 回答 2

1

做2遍。第一次通过可以与您已经拥有的相同。第二遍将为列表中的每个项目分配一个随机答案。

这不是我的想法,所以请原谅任何错误,但它看起来像下面这样:

IList<string> randomAnswers = _list
    .Select(c => c.Definite)
    .OrderBy(c => Guid.NewGuid())
    .ToList();

for (int index = 0; index < randomAnswers.Length; index++)
{
    _list[index].Random = randomAnswers[index];
}
于 2012-07-02T20:14:38.140 回答
0

这应该是您正在寻找的:

var rnd = new Random(); //make this a static field, if needed
var questions = xmlDoc.Descendants("Question").ToList();
_list = _questions.Select(q => new SampleClass
{
    Sample = q.Element("Sample").Value,
    Definite = q.Element("Definite").Value,
    Random = questions[rnd.Next(questions.Count)].Element("Definite").Value
}).ToList();

(来自访问列表中的随机项

请注意,这将允许重复的随机答案,例如答案 1 可能是 2 和 3 的随机答案,并且不会阻止答案本身成为随机答案。如果这些是问题,您将需要使用不同的解决方案(也许对此有所不同)。

于 2012-07-02T20:14:03.917 回答