繁体   English   中英

从条件清单中取出N个物品

[英]Take N Items from List on Condition

我有以下几点:

IDictionary<QuestionDuration, Int32> rules = _service.GetRules(); 

List<Question> questions = _service.GetQuestions();

public class Question {
  public QuestionDuration Duration { get; set; }
}

字典值(Int32)是我需要从列表中选择特定持续时间的问题数量...因此,如果我有字典:

{{QuestionDuration.M2​​,5},{QuestionDuration.M4,3},{QuestionDuration.M8,0},...

所以我需要从原始列表中创建一个列表,其中包含2分钟的5个问题,3分钟的4个问题,8分钟的0个问题,等等...

我试图对此进行分组并使用lambda表达式,但是我无法...

我怎样才能做到这一点?

谢谢,

米格尔

这将创建IEnumerable<List<Question>> (规则字典的三个列表):

IDictionary<QuestionDuration, Int32> rules = _service.GetRules();
List<Question> questions = _service.GetQuestions();

var query = from r in rules
            select questions.Where(q => q.Duration == r.Key)
                            .Take(r.Value).ToList();

提示:如果需要在每个列表中随机选择问题,则在Take运算符之前添加OrderBy(q => Guid.NewGuid()) 或更随机的解决方案:

var rand = new Random();
var query = from r in rules
            select questions.Where(q => q.Duration == r.Key)
                            .OrderBy(q => rand.Next())
                            .Take(r.Value).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM