Я хочу написать небольшой фрагмент тестового кода, чтобы напомнить мне, что некоторые коллекции эквивалентны, т.е. простые, автономные, легко читаемые и LINQ Lambda-ориентированные (чтобы выполнить личную цель обучения).
Вот что я придумал:
var e = new IEnumerable [] {
Enumerable.Range(100, 4).ToArray(),
new int[] { 100, 101, 102, 103 },
new [] { 100, 101, 102, 103 },
Enumerable.Range(100, 4).ToList(),
new List { 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 ));