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(否 副本)
  • 第三个字符串[]:错误答案的数组(大小可以不同) (甚至为空)
它会得到4个答案:3个随机错误答案和1个正确答案。 错误答案在元组字典的字符串[]中

这是可行的,唯一的问题是我可以从第三个值字符串[](a.value.Item2[0])接收重复的错误答案

如何确保3个错误答案没有重复

如果我将
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);