3

特定のコレクションが同等であることを思い出させるために、テストコードの小さな部分を書きたいと思います。つまり、シンプルで、自己完結型で、読みやすく、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 ));
4

1 に答える 1

4

これはうまくいくでしょう

var leftHandSide = inputSequence.First();
var rightHandSideList = inputSequence.Skip(1);

rightHandSideList.All(s => s.SequenceEqual(leftHandSide));

基本的に最初の要素を取り、残りをこれと比較します。ここでは、順序が重要であると想定しています。また、リストに少なくとも2つの要素があると仮定します。

于 2013-01-09T14:59:03.583 に答える