2017-06-09 1 views
-4

日付であるシードに基づいてコレクション(1〜10)から3のセットをランダムに選択します。私は毎日3つの新しいアイテムを選びたいと思っています。 アイテムを選ぶことは問題ではありませんが、どのアイテムが昨日選んだのかを知るには、日付を知るだけで再構築できますか?すでに選択されているセットを除外して、シードされたランダムに基づいてコレクションからサブセットを選択

+1

これは無料のコーディングサービスではないため、この質問をトピックとしてクローズすることにしました。 –

+0

このように動作するウェブサイトがたくさんあります。あなたはいくつかの要件を満たしており、誰かがあなたのために(おそらくお金のために)これらの要件を実装しています。しかし、StackOverflowはさまざまな方法で動作します。要件を自分で実装しようとすると、問題(エラーや予期しない結果)がある場合は、問題の説明、現在のコードを渡して、 –

+0

質問を編集しました。私は解を望んでいない、私はこれが与えられた制約で可能であるかどうかを知りたい。 –

答えて

0

はい、できます。クラスRandomは、疑似ランダムシーケンスを提供します。同じseedの値で開始するとき、シーケンスは常に同じです(Random(int seed)のコンストラクタをチェックしてください)。だから、

私は昨日選ばれていたものを知っていますか、私は日付のみを知っていること 再構築することができますか?

昨日選択した番号を取得するには、昨日と同じシードを使用する必要があります。例えば。指定した日付のの値をDateTimeオブジェクトから使用できます。

var today = DateTime.Today(); 
var random = new Random(today.Ticks);  
var todayItems = items.OrderBy(x => random.Next()).Take(3).ToList(); 

var yesterday = today.AddDays(-1); 
random = new Random(yesterday.Tikcs); 
var yesterdayItems = items.OrderBy(x => random.Next()).Take(3).ToList(); 

ここから今日と昨日のアイテムを比較します。

+0

こんにちは、お返事ありがとうございます。これは今私がやっていることです。しかし、私が求めていたのは、2日間連続して同じアイテムを避けるこの中間的なステップです。意味私は1日に1,2,3を得る場合、私は1,2,3が2日目に選ばれないように除外したい。私はちょうど1日のピックをどこかに保存することでそれを避けることができました。しかし、私はそれを行う方法がないと仮定しましょう、これを行うことはまだ可能でしょうか? –

0

コレクションに10個のアイテムがある場合は、3個のアイテムのサブセットを3個のビットを設定して2進数で表すことができます。 3つの選択肢に対応するビットを設定するだけです。コレクション内の項目0、5、7を選択する場合は、ビット0,5,7を10ビット数に設定します。その番号を保管し、それを使用して、同じ3つのセットを次の日に再び選択しないようにします。昨日の数字と今日の数字を比較するだけです。 10ビットの数値はC#の整数に簡単に収まります。

+0

ありがとう、これは実際に私の元の質問だった、それは3つの項目のどこに翌日にそれらを比較するために選ばれた情報を格納せずに行うことが可能ですか? –

+0

何らかの形で情報を保存する必要があります。そうしないと、同じ選択を繰り返しているかどうかはわかりません。 – rossum

+0

ありがとう、それは私が探していた答えです! –

関連する問題