C# 从字典中获取3个随机值(具有元组字符串[]),无重复项
我有以下功能:C# 从字典中获取3个随机值(具有元组字符串[]),无重复项,c#,linq,C#,Linq,我有以下功能: 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 a
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;
}
private static string[]ReturnAnswers2(string CorrectAnswer、Dictionary answerErrorDict、string uniqueKey)
{
//从Item2数组中获取错误答案并放置1个CorrectAnswer,确保没有重复的CorrectAnswer。
string[]result=answerErrorDict.OrderBy(n=>Guid.NewGuid())
。其中(n=>n.Value.Item2!=null&&!n.Value.Item2[0]。等于(正确答案)&&n.Value.Item1!=uniqueKey)。取(3)。选择(a=>a.Value.Item2[0])
.Concat(新[]{CorrectAnswer})
.OrderBy(n=>Guid.NewGuid())
.ToArray();
返回结果;
}
字典应答错误dict
包含:
- 第一个字符串:某些名称描述(无重复项,此处忽略)
- 元组中的第二个字符串:uniqueKey(否 副本)
- 第三个字符串[]:错误答案的数组(大小可以不同) (甚至为空)
Distinct()
放在.OrderBy(n=>Guid.NewGuid())
之后,它将删除重复项,但有时我可以得到3个答案,而我需要4个(因为重复的distincted)
似乎无法解决这个问题。谢谢你的帮助 删除重复项后
。获取
记录或在选择随机记录之前,可以排除重复项
AnswerWrongDict.OrderBy(r => Guid.NewGuid()).Distinct().Take(4);
您应该使用
.Take()
linq表达式属性我认为存在X Y问题。不要使用Guid.NewGuid()
作为随机性的来源。不是。这只是独特性的来源。谢谢,还有什么选择?谢谢!,通过添加:.Distinct()。在之后取(3)
。选择(a=>a.Value.Item2[0])
oh!如果不确定是否使用Guid.NewGuid()
,则可以生成介于0和listCount之间的格式副本编号。
AnswerWrongDict.OrderBy(r => Guid.NewGuid()).Distinct().Take(3);