【问题标题】:How to get array of random A-Z letters?如何获取随机 A-Z 字母数组?
【发布时间】:2017-07-07 22:56:56
【问题描述】:

让我解释一下我的意思:我有一个包含 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();

但我真的不知道。

【问题讨论】:

    标签: c# linq random


    【解决方案1】:

    如果我正确理解了这个问题,这样的事情应该可以工作:

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

    您最初努力中的Distinct() 充其量是无用的,最坏的情况是适得其反。

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

    【讨论】:

      【解决方案2】:

      我将建议对 Peter 的出色回答稍作改动。

      试试这个:

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-10
        • 2020-04-19
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 2011-01-29
        • 2021-03-15
        相关资源
        最近更新 更多