从Dictionary(带有元组字符串[])中获取3个随机值,不带重复项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Dictionary(带有元组字符串[])中获取3个随机值,不带重复项相关的知识,希望对你有一定的参考价值。
我有以下功能:
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
包含:
- 第一个字符串:一些名称desc(没有重复,在这里忽略)
- 元组中的第二个字符串:uniqueKey(无重复)
- 第三个字符串[]:错误答案的数组(可以是不同的大小甚至是null)
它的作用得到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);
以上是关于从Dictionary(带有元组字符串[])中获取3个随机值,不带重复项的主要内容,如果未能解决你的问题,请参考以下文章
python中的字符串,列表(list),元组,字典(Dictionary)
python 数据类型: 数字Nubmer / 字符串String / 列表List / 元组Tuple / 集合Set / 字典Dictionary
python基础--基本数据类型(Tuple(元组)--不可变数据)