LINQ 和递归

2024-03-07

考虑以下:

public class Box
{
    public BoxSize Size { get; set; }

    public IEnumerable<Box> Contents { get; set; }
}

Box FindBoxBySize(Box box, BoxSize size)
{
    Box _foundBox = null;

    Action<IEnumerable<Box>> _recurse = null;

    _recurse = new Action<IEnumerable<Box>>(boxes =>
    {
        foreach (var _box in boxes)
        {
            if (_box.Size == size)
            {
                _foundBox = _box;

                return;
            }

            if (_box.Contents != null) _recurse(_box.Contents);
        }
    });

    _recurse(box.Contents);

    return _foundBox;
}

有什么办法吗FindBoxBySize()可以使用 LINQ 进行压缩吗?另外:欢迎对我的代码发表评论。我没有做太多递归,所以我可能在实现中遗漏了一些东西。


我还采用扩展方法方法,但使用迭代器方法:

public static class BoxEx
{
    public static IEnumerable<Box> Flatten(this Box box)
    {
        yield return box;
        if (box.Contents != null)
        {
            foreach (var b in box.Contents.SelectMany(b2 => Flatten(b2)))
            {
                yield return b;
            }
        }
    }
}

Your FindBoxBySize方法现在变成:

Box FindBoxBySize(Box box, BoxSize size)
{
    return (from b in box.Flatten()
            where b.Size == size
            select b).FirstOrDefault();
}

您的原始调用代码无需修改即可运行:

var small = FindBoxBySize(box, BoxSize.Small);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LINQ 和递归 的相关文章

随机推荐

  • Android 中对 EditField 的表情符号键盘支持

    我的应用程序在 Samsung Galaxy S3 上使用 Android 4 0 我想在 Android 应用程序的 EditText 字段中集成表情符号字符支持 谁能建议我 我怎样才能实现它 例如 在whatsapp和微信应用程序中 T
  • 提供者:如何在“StreamBuilder()”中使用“notifyListener()”?它会导致错误“在构建期间调用 setState() 或 markNeedsBuild()”

    我有一个Provider model例如provider model dart import package flutter material dart class ProviderModel extends ChangeNotifier
  • 竹持续集成

    我是这个持续集成工具的新手 名为 Bamboo 有人可以为我指出正确的方向 我可以在其中获取有关如何设置此 Bamboo 的信息 如何编写用于不同环境的自动部署的脚本 谢谢提前 您将使用 ant 脚本或 Maven pom xml 进行部署
  • 是否可以在弹性布局中定位每行的第一个和最后一个元素?

    给定 Flex 布局中的缩略图列表 如果 Flex 容器具有可变宽度 是否可以仅使用 CSS 来定位每行的第一个和最后一个元素 thumbnails display flex margin 0 padding 0 list style ty
  • 账户与azure AD关联后如何从Alexa获取accesstoken

    我尝试将 Alexa AWS Lambda 函数 node js 6 10 与 Azure Active Directory 连接到我的 Azure Cloud API 读完后文档 https developer amazon com do
  • 部署后出现 Angular 的“未捕获错误:[$injector:unpr]”

    我有一个相当简单的 Angular 应用程序 它在我的开发机器上运行得很好 但在部署它后失败并显示此错误消息 在浏览器控制台中 Uncaught Error injector unpr http errors angularjs org u
  • 带 ref/Pointer 参数的 C# 反射调用方法

    我想通过反射调用类的每个方法 但无法使用指针作为引用来调用方法 通常我可以为我找到的每个指针传递 null 一切都会好起来的 问题是当函数尝试访问我传递的指针时 该指针将是对内存地址 0 的引用 这显然对我的程序来说会立即崩溃 所以我需要传
  • Spring 集成 TCP

    我想设置 Spring TCP 服务器客户端应用程序 我需要一个服务器侦听端口上的传入消息 例如 6666 并且客户端在不同的端口上发送消息 例如 7777 我已遵循文档 http docs spring io spring integra
  • 在 cocoa/iPhone 中将纪元时间转换为 NSDate

    我有纪元时间的值 比如 123456789 现在我想将其转换为NSDate在可可框架中 谁能告诉我吗 thanks 文档 http developer apple com iphone library documentation Cocoa
  • 使用 Firestore,如何使用 java 类序列化文档中的引用类型字段?

    如果我有一个包含 引用 类型字段的 Firestore 文档 那么在使用自动 POJO Java 对象序列化时如何读取和写入该字段 POJO 类型字段文档参考 https firebase google com docs reference
  • WPF 相当于 TextRenderer

    我用过TextRenderer测量字符串的长度 从而适当调整控件的大小 WPF 中是否有等效项或者我可以简单地使用TextRendered MeasureString 谢谢纪修 阅读您的链接后 我想到了以下两个内容 它们都适合我
  • Python将整列添加到csv文件中,而不读取文件内容

    我需要使用 Python 将列添加到 csv 文件 我能想到的唯一方法是读取整个文件 编辑每一行以添加 1 个元素 然后再次写入文件 然而 我真的不想这样做 因为文件的大小 超过 32000 行 每次我想添加列时似乎需要大量的读写 即使使用
  • 如何从 fgets 中检测空字符串

    我试图将 stdin 中的 fgets 输入检测为空 当我按 Enter 键而不输入任何内容时 这是我的程序 int main char input 1000 printf Enter fgets input 1000 stdin inpu
  • 如何使用 box2d 在 libgdx 中拖动对象?

    我已将对象添加到box2d世界在libgdx 我想知道是否可以用鼠标拖动对象 如果是这样 怎么办 thanks 这里有几个选项 您可以使用鼠标关节 也可以使用运动体并手动设置其位置 看看如何使用鼠标关节的一个很好的例子 http code
  • 图像作为绘制形状的“背景”

    是否可以使用图像而不是颜色来 填充 HTML5 画布上的形状 我画了一堆形状 各个角以 45 度角切掉的正方形 我希望能够用图像而不是颜色来 填充 这些形状 目前我有一行指出 context fillStyle 123456 example
  • 如何使用 Meteor.js、Twitter 和 Oauth 发布推文

    我在使用 Meteor 和 Twitter 时遇到了一些问题 我想做的就是通过点击按钮发布一条推文 为此 我必须通过 Oauth 向 Twitter 服务验证自己的身份 目前 我正在以一种非常复杂的方式进行身份验证 从客户端到服务器并返回
  • 适用于 Android 的本机 OpenCV 示例抛出 UnsatisfiedLinkError

    我尝试在模拟器上运行 opencv android 示例 带有本机代码的示例 例如示例 教程 2 高级 1 添加本机 OpenCV 失败 我有一个Win7 x86系统 我可以构建本机库 但如果运行示例 我总是会遇到以下异常 10 04 08
  • 每个线程组的概率

    如果我的测试计划中有 3 个线程组 如何为每个组设置恒定概率 请求权重 我是 JMeter 的新手 您能在屏幕截图上显示您的设置吗 只需将每组的线程数设置为测试总线程数的一个因子即可 如果有 100 个 VU 则 g1 设置为 50 g2
  • 我如何使用 iOS 中的 Fabric 框架从我的应用程序中注销 Twitter

    在我的 iOS 应用程序中 我使用集成 Twitter 登录织物框架 TWTR作曲家 第一次登录并在 Twitter 上发布推文时 它工作正常 但我无法在我的应用程序中从 Twitter 注销 当我第二次尝试登录时 twitterlogin
  • LINQ 和递归

    考虑以下 public class Box public BoxSize Size get set public IEnumerable