2

私は次のものを持っています:

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 つなどのリストを作成する必要があります。

これにラムダ式をグループ化して使用しようとしましたが、できませんでした...

これどうやってするの?

ありがとうございました、

ミゲル

4

1 に答える 1

5

これで作成されますIEnumerable<List<Question>>(ルールの辞書用の 3 つのリスト):

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();

ヒント:各リストでランダムに質問を選択する必要がある場合は、演算子OrderBy(q => Guid.NewGuid())の直前に追加します。Takeまたはよりランダムな解決策:

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();
于 2013-03-06T20:58:23.830 に答える