我有以下功能:
private static string[] ReturnAnswers2(string CorrectAnswer, Dictionary<string, Tuple<string, string[]>> AnswerWrongDict, string uniqueKey)
{
//Get wrong answers from Item2 array and placing 1 CorrectAnswer making sure there are is no duplicated CorrectAnswer.
string[] result = AnswerWrongDict.OrderBy(n => Guid.NewGuid())
.Where(n => n.Value.Item2 != null && !n.Value.Item2[0].Equals(CorrectAnswer) && n.Value.Item1 != uniqueKey).Take(3).Select(a => a.Value.Item2[0])
.Concat(new[] { CorrectAnswer })
.OrderBy(n => Guid.NewGuid())
.ToArray();
return result;
}
字典AnswerWrongDict
包含:
它的作用得到4个答案:3个随机错误答案,1个正确。错误的答案在元组字典中的字符串[]内。
这是有效的,只发出我可以从第三个值字符串[](a.Value.Item2 [0])收到重复的错误答案。
我如何确保3个错误答案中没有重复项?
如果我在Distinct()
之后放置.OrderBy(n => Guid.NewGuid())
它将删除重复但我有时可以得到3个答案,而我需要4(因为重复区别)。
似乎无法解决这个问题。帮助赞赏。
删除重复的.Take
记录后或在选择随机记录之前,您可以排除重复记录。
AnswerWrongDict.OrderBy(r => Guid.NewGuid()).Distinct().Take(4);
您应该使用.Take()
linq表达式属性
AnswerWrongDict.OrderBy(r => Guid.NewGuid()).Distinct().Take(3);