我想写一小段测试代码来提醒我,某些集合是等效的,即简单,自包含,易于阅读和面向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 ));
可以了
var leftHandSide = inputSequence.First();
var rightHandSideList = inputSequence.Skip(1);
rightHandSideList.All(s => s.SequenceEqual(leftHandSide));
基本上,我们取第一个元素,并与剩下的元素进行比较。这里我假设顺序很重要。同样假设列表至少有2个元素