断言使用LINQ,数组的所有成员都是等价的?

时间:2013-01-09 14:37:20

标签: c# linq

我想写一小段测试代码来提醒我某些集合是等价的,即简单,自包含,易于阅读和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 ));

1 个答案:

答案 0 :(得分:4)

这将有效

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

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

基本上我们采用第一个元素,并将其与之比较。在这里,我假设订单很重要。假设列表至少包含2个元素。