如何获得随机A-Z字母数组?

时间:2017-07-07 22:56:57

标签: c# linq random

让我解释一下我的意思:我有一个包含4列的数据库,其中一列是Letter,所以每行都有一个从'A'到'Z'的字符,这些不是唯一的,所以有多行“A”,多行“B”等。

我想要做的是获得包含所有字母的26(a-z)行,但随机化具有相同字母的行。所以我想要从A到Z的26行,只有一行A,一行B ......,这些字母的行是随机的。我希望你们能理解我的意思。提前谢谢!

我在想这样的事情:

var randomQuestions = questions.Distinct().GroupBy(q => q.Letter).Take(26).ToArray();

但我真的不知道。

2 个答案:

答案 0 :(得分:9)

如果我正确理解了这个问题,那么这样的事情应该有效:

Random random = new Random();

var randomQuestions = questions
    .GroupBy(q => q.Letter)
    .SelectMany(g => g.Skip(random.Next(g.Count())).Take(1));

原始努力中的Distinct()充其量只是无用的,最坏的情况会适得其反。

以上简单地按字母对数据进行分组,然后从每个组中选择一个随机的单个元素。如果原始数据中有26个不同的字母,则上面将为每个不同的字母选择一个随机数据行。您将在最终结果中获得二十六个元素。

答案 1 :(得分:0)

我会建议对彼得的出色回答略有不同。

试试这个:

Random random = new Random();

var randomQuestions =
    from q in questions
    orderby random.Next()
    group q by q.Letter into gqs
    from gq in gqs.Take(1)
    select gq;