LINQ 本身是否支持将集合一分为二? [复制]

2024-01-07

给定一个项目集合,如何根据谓词将该集合拆分为 2 个子集合?

您可以执行 2 个Where 搜索,但运行时间为 2*N(虽然仍然是 O(n),但需要两倍的时间,显然不是首选)

IEnumerable<int> even = nums.Where(i => IsEven(i));
IEnumerable<int> odd = nums.Where(i => !IsEven(i));

您可以自己执行一次线性传递(此处重构为扩展方法),但这意味着您必须将此代码拖到各处,而且更多的自定义代码会使事情更难以维护。

public static void SplitOnPred<T>(
        this IEnumerable<T> collection,
        Func<T, bool> pred,
        out IEnumerable<T> trueSet,
        out IEnumerable<T> falseSet
    ) {
        List<T> trueSetList = new List<T>();
        List<T> falseSetList = new List<T>();
        foreach( T item in collection ) {
            if( pred( item ) ) {
                trueSetList.Add( item );
            } else {
                falseSetList.Add( item );
            }
        }
        trueSet = trueSetList;
        falseSet = falseSetList;
}

问题:LINQ 是否有对在 1 次线性传递中分割集合的本机支持?


LINQ 是否有对在 1 次线性传递中分割集合的本机支持?

没有内置方法可以根据谓词将集合拆分为两个版本。您需要使用自己的方法,类似于您发布的方法。

最接近的内置方法是GroupBy http://msdn.microsoft.com/en-us/library/system.linq.enumerable.groupby.aspx (or ToLookup http://msdn.microsoft.com/en-us/library/bb549073.aspx)。您可以按奇数或偶数分组:

var groups = nums.GroupBy(i => IsEven(i));

这将根据数字是奇数还是偶数分为两个“组”。

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

LINQ 本身是否支持将集合一分为二? [复制] 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • Eclipse ADT 捆绑包链接在哪里? [复制]

    这个问题在这里已经有答案了 在 Android 开发的官方网站上 我无法再看到 Eclipse ADT 捆绑包的链接 我无法切换到 Android Studio 因为我的框架当前是基于 Ant 的 而不是Gradle https en wi
  • 如何在 Flutter 中创建带圆角的模态底板?

    显示模态底部表不提供任何造型或装饰 我想创建类似 Google Tasks 底页的内容 更新于 2019 08 05 您现在可以使用默认值来完成此操作showModalBottomSheet现在支持添加的方法ShapeBorder并且bac
  • Jooq LocalDateTime 字段使用系统时区而不是会话时区

    我正在使用 jooq v3 11 9 访问以 UTC 时间运行的 MySQL 数据库 我使用生成的实体并使用 JSR 310 时间类型 我在配置中使用的选项
  • Spring 和 XSLT,字符编码

    我对 HTML 视图的正确字符集编码部分有疑问 JSP 文件中的 XSL 文件生成 html 数据库中的值编码正确 但表的静态标头包含错误的字符 例如 有一些标题名称为 伊米斯 纳兹维斯科 哈斯洛 普莱奇 但它会生成 Imi Nazwisk
  • 如何使用 Xaml 中的 SortDescriptions 对 TreeView 项目进行排序?

    我有一个清单Layers绑定到一个TreeView其中每个实例都有一个列表Effects 我通过 HierarchicalDataTemplate 向它们展示 该模板效果很好 但我正在尝试使用它们对它们进行排序SortDescription
  • 使用 JavaScript/JQuery 打开最大化新窗口的最快方法?

    什么是fastest打开新窗口的方法 最大化 使用与大多数浏览器兼容的 JavaScript 和 或 JQuery
  • 使用数据属性滚动到元素

    我试图弄清楚如何使用数据属性让元素滚动到与 ID 匹配的特定元素 而不是使用锚标记 这就是我正在做的事情 一旦用户单击按钮 它将显示内容并滚动到与数据属性匹配的特定元素 我似乎无法让它滚动 div class container div c
  • 在运行时动态组合 Boost.Spirit.Qi 规则(任意数量的替代方案)

    我想知道 Boost Spirit Qi 中是否有一种方法可以在运行时动态组合任意数量的规则 Boost Spirit 的内部工作原理对我来说仍然有点神秘 但由于规则是作为对象实现的 所以它似乎是可行的 我的动机是使我的语法的某些部分易于扩
  • 通过 PHP 启动服务器端打印作业

    这很可能不是一件容易的事 但情况如下 我编写了一个 C 命令行应用程序 其中 使用 ITextSharp 创建 PDF 将其写入磁盘 uses Acrord32 exe 这是 Acrobat Reader 通过System Diagnost
  • 将bootloader和内核制作成iso? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何创建将内核加载到 iso 的简单引导加载程序 已经过去 5 天了 我在 google 中搜索并进行
  • Java - Swing - JTable - 设置所选行的颜色,但不设置单元格的颜色

    我试图让我的表格在您单击单元格时选择整行 可以通过关闭列选择来完成 但是 我不希望您单击的特定单元格周围的超厚边框突出显示 我希望这很容易 但显然它涉及渲染器 所以我做了很多研究 我能得到的最接近的是 JTable contactTable
  • SML:为什么函数总是采用一个参数使语言变得灵活

    我 从一本 SML 书中 了解到 SML 中的函数总是只接受一个参数 一个元组 接受多个参数的函数只是一个接受一个元组作为参数的函数 通过函数绑定中的元组绑定来实现 我明白这一点 但在这之后 书上说了一些我不明白的话 this point
  • Python - 使用 BeautifulSoup 抓取 ESPN 表

    我正在尝试使用 BeautifulSoup 来抓取 季节统计 表页 有什么办法可以将整个表变成一个汤对象吗 目前我的代码是这样的 seasonStats soup find table id statsTable categoryList
  • Swift 中使用 SHA512 的哈希字符串

    有人知道如何在 swift 中重现 PHP 哈希方法 hash SHA512 value true 吗 我尝试将 CommonCrypto C 库与以下代码一起使用 extension String func digest length I
  • 五分钟规则 - 一次磁盘 I/O 访问的价格

    这是一个非常有趣的话题 http cacm acm org magazines 2009 7 32091 the five minute rule 20 years later fulltext 他们使用以下公式来计算访问间隔时间 Brea
  • 如何在 Raspberry Pi 上使用 TBB 构建 OpenCV?

    我正在尝试使用 TBB 构建 OpenCV 以启用多线程 Note 我能够构建 OpenCV 2 4 10无TBB从源代码开始 然后使用 OpenCV Python 绑定 当我尝试全新安装并在安装了 TBB 的情况下构建 OpenCV 时W
  • “docker compose”和“docker-compose”之间的区别

    Note 这个问题是在更新 docker 文档之前创建的 这就是它们更新的原因 请参阅this https stackoverflow com a 66526176 1219280回答 请不要发布指出差异的文档的答案 我一直在使用docke
  • Delphi 中整数读取是原子的吗?

    对于从XE2到XE8的Delphi编译器 对于非windows目标平台 用 Volatile 注释的整数数据成员的读取操作是原子的吗 我知道对于 Windows 平台的情况 当且仅当数据成员对齐到 4 字节时它是原子的 但是非 Window
  • 默认 MySQL 数据库名称

    我正在尝试在服务器上安装 mybb 但管理员响应时间太长 除了数据库名称之外 我拥有所需的所有信息 Linux 服务器上的 mysql 有默认名称吗 没有默认数据库 全新安装的 MySQL 服务器将有 0 个数据库 安装脚本将运行mysql
  • LINQ 本身是否支持将集合一分为二? [复制]

    这个问题在这里已经有答案了 给定一个项目集合 如何根据谓词将该集合拆分为 2 个子集合 您可以执行 2 个Where 搜索 但运行时间为 2 N 虽然仍然是 O n 但需要两倍的时间 显然不是首选 IEnumerable