gpt4 book ai didi

linq - .NET 4.0 中是否有序列运算符实现?

转载 作者:行者123 更新时间:2023-12-04 06:50:58 25 4
gpt4 key购买 nike

我的意思是类似于 Linq join、group、distinct 等,只处理值序列,而不是集合。

序列和集合之间的区别在于序列的长度可能是无限的,而集合是有限的。

让我给你举个例子:

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 = 2010 年 1 月及以后每个月的 1 号和 15 号
    c2 = 2010 年及以后的工作日
    c3 = 2010-2012 年的所有天数
    c4 = c1 和 c2 和 c3

    这基本上会在 2010 年到 2012 年的每个月的第 1 日和第 15 日给我,但前提是这些日期是工作日。

    有了这样的函数,生成有问题的值会容易得多,而不必明确地从中构建集合。在上面的示例中,构建前两个集合需要知道第三个集合的约束,并且示例可以变得比上面的复杂得多。

    最佳答案

    我想说的是 LINQ 运算符已经在一般序列上工作了 - 但它们并不是专门为单调序列而设计的,这就是你在这里得到的。

    写这样的东西不会太难,我怀疑 - 但我不相信任何内置的东西;就我所见,System.Interactive 中甚至没有针对此场景的任何内容。

    关于linq - .NET 4.0 中是否有序列运算符实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3138832/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com