特定のコレクションが同等であることを思い出させるために、テストコードの小さな部分を書きたいと思います。つまり、シンプルで、自己完結型で、読みやすく、LINQ Lambda指向です(個人的な学習目標を達成するため)。
これが私が思いついたものです:
var e = new IEnumerable<int> [] {
Enumerable.Range(100, 4).ToArray(),
new int[] { 100, 101, 102, 103 },
new [] { 100, 101, 102, 103 },
Enumerable.Range(100, 4).ToList(),
new List<int> { 100, 101, 102, 103 }
};
var permutations = e.SelectMany(s => e, ( lhs, rhs ) => new { lhs, rhs })
.Where( x => !x.lhs.Equals ( x.rhs ) );
foreach (var item in permutations)
{
Assert.That( item.lhs, Is.EqualTo( item.rhs ) );
}
Q1。ペアの10の組み合わせを生成するための「単純な」変更はありますか(現在、ペアの順列は20あります)?「単純」とは、再帰的な拡張メソッドを作成するのではなく、既存のLINQ演算子を使用することを意味します。
Q2。コンテキストで「配列のすべてのメンバーが同等である」と主張するより良い方法はありますか?
Q1に関しては、これは私に右側(rhs)を与えるように見えますが、左側(lhs)を与えるために「オリジナル」を「キャリースルー」(または再結合)するにはどうすればよいですか?:
var r = e.SelectMany(( e1, i ) => e.Skip( i + 1 ));