c# - 有没有一种简单的方法来计算递归数据结构中的元素?

标签 c#

我在 C# 对象中有一个递归数据结构。

一个对象有一个“部分”的集合。每个 Part 也有一个 Parts 的集合。等等。该结构理论上可以永远嵌套。

object
--> Part
--> Part
  --> Part
  --> Part
    --> Part
  --> Part
--> Part

我想计算这个结构中所有部分的数量。所以,所有的枝叶。 (在上面的示例中,总共有 7 个部分。)

有没有一种方法可以在不初始化计数器并向下递归树的情况下执行此操作?我当然可以做到这一点,但它似乎很慢而且有点矫枉过正。有更好/更简单的方法吗?

最佳答案

处理递归数据结构的一种自然方法,用于计数或任何其他类型的聚合,是采用递归函数:

class Part {
    IEnumerable<Part> SubParts {get;set;}
    public int TotalParts {
        get {
            return 1 + SubParts.Sum(p => p.TotalParts);
            //     ^                       ^
            //     |                       |
            // Add one for this part       |
            //                             |
            //         Use LINQ to aggregate counts recursively
        }
    }
}

该函数假设较低级别的部分不在较高级别的部分之间共享,即您的部分图是一棵树。提高此类函数性​​能的一种方法是将结果缓存在 Part 中低于您的级别的结果,以确保递归计算仅完成一次。

您可以通过实现队列或堆栈来避免递归,但实现起来不会那么简单。

关于c# - 有没有一种简单的方法来计算递归数据结构中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18274423/

相关文章:

c# - 在网络共享驱动器上复制文件

c# - Asp.net mvc fileupload 通过 ajax

c# - 尝试在 C# 上使用 AutoCAD 类镜像绘图

c# - 从值列表中推断出下降趋势

c# - WPF:SizeToContent ="WidthAndHeight"+ WindowState ="Minimized"错误

c# - GdiPlus 溢出异常

c# - 使用MediaElement C#asp.net网站播放mp3文件

c# - 如果 Windows 版本低于 7 则退出

c# - 检索所有可用打印机驱动程序的列表(如添加打印机向导)

c# - 一个新的随机初始化向量在加密过程中总是产生相同的密文