オプション1:郵便番号、シャッフルは、マルセロさんのコメントに展開する
を解凍し、そして既存ものシャッフルするのではなく、新しいリストを作成する気にしないあなたを仮定:
var zipped = listA.Zip(listB, (a, b) => new { a, b }).ToList();
Shuffle(zipped);
var newListA = zipped.Select(pair => pair.a).ToList();
var newListB = zipped.Select(pair => pair.b).ToList();
を
オプション2:インデックスをシャッフルする
エクスポートするコードとMAKの答えにND:もちろん
var indexes = Enumerable.Range(0, listA.Count).ToList();
Shuffle(indexes);
var newListA = indexes.Select(index => listA[index]).ToList();
var newListB = indexes.Select(index => listB[index]).ToList();
が少しより多くの仕事で、オリジナルのリストを変異させる可能性が近づき両方。
オプション3:同じランダムシード私は個人的にメソッド/それらを必要とする代わりに、新しいものを作成するクラスにRandom
(または何でも)を渡したい
で両方のリストをシャッフルします。だから、私はShuffle
にRandom
というパラメータを与えるだろう。さまざまな問題を回避し、依存関係をうまく表現します。あなたが同じシードで2つのRandom
のインスタンスを作成することによって、あなたの利点にこれを使用することができます:
int seed = existingRandom.Next();
Shuffle(listA, new Random(seed));
Shuffle(listB, new Random(seed));
と仮定Shuffle
は同じことを同じ乱数列が与えられたとき、これは同じように両方のリストをシャッフルします。
ジップ、シャッフル、解凍 –