Под этим я подразумеваю сходство с объединением Linq, группой, отдельным и т. Д., Работающим только с последовательностями значений, а не с коллекциями.
Разница между последовательностью и коллекцией заключается в том, что последовательность может быть бесконечнойв длину, тогда как коллекция конечна.
Позвольте мне привести пример:
var c1 = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var c2 = FunctionThatYieldsFibonacciNumbers();
var c3 = c1.Except(c2);
Это не работает.Реализация Except не работает на том основании, что числа в любой коллекции будут строго возрастать или убывать, поэтому сначала она пытается собрать все значения из второй коллекции в набор (или подобный), и только после этогоначните перечислять первую коллекцию.
Если предположить, что вышеприведенная функция является просто циклом while, который не завершается, пока вы не перестанете явно перечислять ее, приведенный выше код завершится с исключением из-за нехватки памяти.
Но, учитывая, что у меня есть коллекции, которые считаются строго восходящими или нисходящими, существуют ли уже какие-либо реализации в .NET 4.0, которые могут выполнять:
- Дайте мне все общие значенияобоим (внутреннее соединение)
- Дайте мне все значения обоих (объединение / внешнее соединение)
- Дайте мне все значения в последовательности # 1, которая не находится в последовательности # 2
Мне нужен этот тип функциональности, связанный с системой планирования, которую я должен построить, где мне нужно делать такие вещи, как:
c1 = the 1st and 15th of every month from january 2010 and onwards
c2 = weekdays from 2010 and onwards
c3 = all days in 2010-2012
c4 = c1 and c2 and c3
Это, в основном, дало бы мне каждый 1-й и 15-й числа каждого месяца в период с 2010 по 2012 гг., Но только тогда, когда эти даты приходятся на рабочие дни.
С такими функциями было бы намного проще генерировать рассматриваемые значения безявно приходится создавать коллекции из них.В приведенном выше примере для построения первых двух коллекций необходимо знать ограничение третьей коллекции, и примеры могут стать гораздо более сложными, чем приведенные выше.