我有一个XML文件,我正在解析一些内容以显示在列表中:
public class SampleClass
{
public string Sample {get; set;}
public string Definite {get; set;}
public string Random {get; set;}
}
<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
?
列表中的随机副本是不可接受的。
答案 0 :(得分:1)
两次通过。第一遍可以与您已有的相同。第二遍将为列表中的每个项目分配一个随机答案。
这是我的头脑,所以原谅任何错误,但它看起来像下面这样:
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];
}
答案 1 :(得分: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();
(来自Access random item in list)
请注意,这将允许重复的随机答案,例如答案1可以是2和3的随机,并且不会阻止答案本身成为随机。如果这些是问题,您将需要使用不同的解决方案(可能是对此的变体)。