创建一个包含比原始元素更多元素的 ReactiveUI 派生集合

2024-03-28

是否可以创建一个 ReactiveUI 派生集合,其中包含比原始集合更多的元素?

我已经看到有一种方法可以过滤集合并选择单个属性,但我正在寻找相当于可枚举的 SelectMany 操作。

为了说明这一点,想象一下尝试获取代表每个陷入交通拥堵的乘客的派生集合。

class Car 
{
    ReactiveCollection<Passenger> Passengers;
}

var TrafficJam=new ReactiveCollection<Car>();
EveryPassengerInTheTrafficJam=Cars.CreateDerivedCollection(c=>c.Passengers);

上面不起作用,我认为错误是IEnumerable<ReactiveCollection<Passenger>>无法投射到ReactiveCollection<Passenger>- 无论如何,或者与类型有关的东西。

我无法找出这种扁平化的正确方法 - 诚然,我可能在这里完全错误地吠叫,所以请让我知道是否有更好的方法来实现同样的事情!


眼下,CreateDerivedCollection不支持SelectMany作为一种转换,处理删除变得太棘手。如果你没有很多项目,你可以每次都重新生成集合:

cars.Changed
    .Select(_ => cars.SelectMany(x => x.Passengers).ToList())
    .ToProperty(this, x => x.Passengers);

Edit:好吧,我们开始吧:

var whenCarsOrPassengersInThoseCarsChange = Observable.Merge(
    cars.Changed
        .SelectMany(_ =>
            cars.Select(x => x.Passengers.Changed).Merge())
        .Select(_ => Unit.Default),
    cars.Changed.Select(_ => Unit.Default));

whenCarsOrPassengersInThoseCarsChange.StartWith(Unit.Default)
    .Select(_ => cars.SelectMany(x => x.Passengers).ToList())
    .ToProperty(this, x => x.Passengers);

因此,当我们想要重新评估乘客列表时,我们有两种主要情况:

  1. 当其中一名乘客在车厢内换车时
  2. 当其中一辆车发生变化时

然而,棘手的部分是,我们只想观察乘客是否有集合中的汽车(即,如果一辆车被移走,我们就不再关心它的乘客)。

正确追踪自杀乘客

所以,那个奇怪的 SelectMany 的想法是,“每次汽车列表发生变化时,构建一个新的 Observables 列表来表示乘客集合何时发生变化,并将它们全部合并在一起”。

然而,如果我们only有了这个声明,我们就必须等待添加汽车and在我们获得新的乘客列表之前,其乘客发生了变化,因此当汽车列表也发生变化时,我们也必须进行更新。

这个“单位”业务是什么?

在这种情况下,我实际上并不关心这些可观察到的值,只关心它们发生时的值。 “Unit”是 void 的 Rx 版本,它只有一个值“Unit.Default”。当您只关心某件事发生时,而不关心它的价值时,您可以使用它。

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

创建一个包含比原始元素更多元素的 ReactiveUI 派生集合 的相关文章

  • 如何修复 scanf 将数据放入数组中?

    有人可以就 scanf 提出建议吗 message 是一个 4 行 x 16 列的数组 用户输入数字 全部为 1 位整数 后 按 Enter 键时会出现错误消息 正如所说 可能与 scanf 有关 for int i 0 i lt M i
  • 跳转到文件行c#

    我如何跳到文件中的某些行 例如 c text txt 中的第 300 行 using var reader new StreamReader c test txt for int i 0 i lt 300 i reader ReadLine
  • 用 C 语言制作查找表的最佳方法是什么?

    我正在开发一个嵌入式 C 项目 我有一个 LCD 显示屏 每个字符都有一个 5x7 点阵 要显示特定字符 您必须移动与要打开的点相关的 5 个字节 所以我需要制作某种带有键的查找表 我可以在其中传递 ASCII 字符 并返回一个 5 字节的
  • 为什么即使实际类型直到最后才定义,依赖名称也可以被认为是完整的

    考虑这个例子 https godbolt org z JQK tu template
  • 将 void* 作为函数调用而不声明函数指针

    我已经搜索过 但找不到任何结果 我的术语可能有问题 所以如果以前有人问过这个问题 请原谅我 我想知道是否有一种简单的方法可以调用void 作为 C 中的函数 无需首先声明函数指针 然后为函数指针分配地址 IE 假设要调用的函数是类型void
  • nUnit Assert.That(method,Throws.Exception) 不捕获异常

    有人可以告诉我为什么这个检查异常的单元测试失败了 显然我真正的测试是检查其他代码 但我使用 Int32 Parse 来显示问题 Test public void MyTest Assert That Int32 Parse abc Thro
  • 是否可以将向量的一部分作为向量发送给函数? [复制]

    这个问题在这里已经有答案了 我想看看是否可以将向量的一部分传递给函数 以便它显示为函数的法线向量 更重要的是 我希望这可以在 O 1 的常数时间内完成 我不想迭代向量来创建一个新向量 事实上 我还希望在下面的示例中将新向量的大小更改为 40
  • 公开 ASP.NET 用户控件中的复杂属性

    我想从自定义 ASP NET 用户控件公开一个复杂的属性 可以通过aspx页面中的控制标签来设置 像这样的事情 public class TestData public int X public int Y public partial c
  • 无法使用 process.ErrorDataReceived c# 获取进程错误输出

    我已经建立了Form我使用了一段时间的应用程序 现在我想捕捉StandardError我的流程及其standartOutput 我查看了答案SO and MSDN https msdn microsoft com en us library
  • MDI应用程序中父窗体的问题

    我使用按钮作为容器中的控件 父窗体 当子窗体出现时 父窗体中的控件 按钮 图片 标签 出现在子窗体上并将其覆盖 我看不到子窗体 有谁知道如何防止这种情况 我不想将这些控件设置为 Control Visible false 因为当我最小化子表
  • C# - 获取 GPU 的总使用百分比

    我正在向我的程序添加一些新功能 这些功能当前通过串行连接将 CPU 使用情况和 RAM 使用情况发送到 Arduino 请参阅this https create arduino cc projecthub thesahilsaluja cp
  • C 错误:格式“%s”需要“char *”类型的参数,但参数 2 的类型为“char (*)[100]”

    过去几天我正在用 c 进行练习 并且收到此警告 如标题所示 我已经尝试了很多东西 但我真的不知道如何准确地解决这个问题 我不擅长编程 所以会有错误 以下是我正在使用的结构 无法更改 因为它们就是这样给出的 typedef struct bo
  • 将引用托管代码中分配的内存的指针传递给非托管代码

    我在 C 中分配了一个大的 char 缓冲区 并且希望将指向此数据的指针传递给 DLL 中的未管理的 c 函数 现在我认为要使其工作 必须修复字符缓冲区 以便 GC 在函数工作时无法移动它 如果是这样 我会声明缓冲区已固定并调用 UNSAF
  • 如何从与桌面交互的应用程序与 Windows 服务进行通信?

    使用 Net 与服务交互的最佳方式是什么 即大多数托盘应用程序如何与其服务器通信 如果这个方法也是跨平台的 那就更好了 在 Mono 中工作 所以我猜远程处理已经过时了 Edit 忘了说了 我们仍然需要在现场支持 Windows 2000
  • 如何从 .NET DataGridView 控件单元格值写入文本文件?

    我有以下代码应该循环遍历我的所有行DataGridView 并将其所有单元格值写入文本文件 但是 它输出所有行 但仅输出每行的第一个单元格 而不输出其他三个单元格 string file name C test1 txt var objWr
  • 何时使用 const char * 何时使用 const char[]

    我知道它们是不同的 我知道它们有何不同 并且我阅读了我能找到的所有关于char vs char 但所有这些答案都没有告诉我们什么时候应该使用它们 所以我的问题是 你什么时候使用 const char text text 你什么时候使用 co
  • 显式调用静态构造函数

    我想为下面的课程编写单元测试 如果名称不是 MyEntity 则 mgr 应为空 消极的单元测试 使用 Manager 私有访问器 我想将名称更改为 Test 以便 mgr 应该为空 然后会验证 mgr 值 为了实现这一点 我想显式调用静态
  • 如何在 if () 语句中声明变量? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 的条件或控制语句中声明和初始化变量 https stackoverflow com questions 1516919 declaring and initializing a variabl
  • OledbConnection.Dispose() 是否关闭连接? [复制]

    这个问题在这里已经有答案了 可能的重复 如果使用 using 子句 是否需要关闭 DbConnection https stackoverflow com questions 12033998 is there any need to cl
  • 将 tiff 像素长宽比更改为正方形

    我正在尝试对多页 tiff 文件执行条形码识别 但是 tiff 文件是从传真服务器 我无法控制 发送给我的 该服务器以非方形像素长宽比保存 tiff 这导致图像由于纵横比而被严重挤压 我需要将 tiff 转换为方形像素长宽比 但不知道如何在

随机推荐

  • Node.js fs.unlink 函数导致 EPERM 错误

    我在用着fs unlink 删除文件 我收到以下错误 uncaught undefined Error EPERM Operation not permitted Path To File 有人知道为什么会发生这种情况吗 您无法删除不为空的
  • DynamoDB:如何使用查询过滤器检查 MAP 中的条件

    我有一张表 结构如下 当我进行查询时 我希望能够对数据图进行查询过滤 但我不太确定如何设置查询 这是我到目前为止所拥有的 HashMap
  • 如何通过 ASP.NET Core/Razor 单击按钮来运行在 Razor 页面上编写的 C#?

    我想在单击页面上的按钮时执行我直接在 razor 页面上编写的 C 方法 我发现 如果我引用了页面上的按钮 它会在第一次加载时执行该方法 但当我实际单击该按钮时 它不会再次执行 这是代码 Razor 页面 C 参考 functions in
  • Go 1.13 RSS持续增加,疑似清理问题

    我们的一项 Go 服务中的 RSS 不断增加 我们怀疑这是由于 scavenger 没有正确地将内存返回给操作系统 或者操作系统由于使用 MADV FREE 而没有收回内存 通过 pprof 检查 未检测到内存泄漏 我们尝试使用以下简单的
  • Facebook API - 无法获取页面个人资料图像

    我有一个页面无法从中获取公共个人资料图像 为什么会这样 为什么会发生 有问题的页面是 警告 脱衣舞娘的 NSFW 风格图像 真的很抱歉 我只能找到示例 无论如何都不需要查看该页面 https www facebook com pages T
  • Java Applet 不缓存

    我部署的 Java 小程序有问题 该小程序拒绝缓存在 jvm 的 粘性 缓存 或浏览器 中 由于某种原因 每次用户加载该小程序所在的页面时 jvm 都会从服务器重新下载 jar 文件 这会导致长时间延迟 包含该小程序的网页是通过互联网访问的
  • 如何在 Windows 机器上构建或安装 freeglut

    我下载了freeglut http freeglut sourceforge net 我正在阅读安装指示 http freeglut sourceforge net docs install php 我提取了所有文件 我看到一个名为conf
  • 无服务器框架Python lambda直接返回JSON

    我试图找出如何使用无服务器框架直接以 JSON 形式返回响应 这是 AWS 上具有 Lambda 代理集成的功能 全部默认设置 目标是从 python lambda 函数中 HTTP 响应客户端直接获取的是 JSON 对象 而不是 JSON
  • 在javascript中访问数组中的数组

    我收到一个 JSON 回复 如下所示 order id 12 customer user user status Pending date added 02 09 2012 total 500 00 action text View hre
  • 如何使用回调来保证顺序执行?

    我正在尝试围绕回调进行思考 但我不明白回调是如何进行的保证将执行一条语句之后 就时间而言 另一个声明需要一个unknown多少时间 我不在乎承诺 等待 异步等但只是我想学习的简单回调 例如下面的例子 我的方法将在未知时间事件发生之前执行回调
  • 从网页中的 servlet 读取 Quicktime 电影?

    我有一个 Servlet 它通过从服务器读取文件来构造对媒体文件请求的响应 File uploadFile new File C TEMP movie mov FileInputStream in new FileInputStream u
  • 如何创建使用 ng-model 的角度日期选择器指令

    我为 jQuery UI 日期选择器创建了一个角度指令 问题是 当选择日期时 指令不会更新输入的 ng model 知道为什么吗 http jsbin com ufoqan 1 edit http jsbin com ufoqan 1 ed
  • 最小化/小型化可可 NSWindow 没有标题栏

    我被困住了 显然 因为我在这里发布了一个问题 我为我的 OS X cocoa 应用程序构建了自己的自定义窗口控件 关闭按钮效果很好 没问题 当我禁用标题栏时 最小化按钮根本不起作用 因此 当标题栏像上图一样打开并且我点击此方法时 最小化效果
  • 查询谷歌电子表格的特定工作表

    我正在尝试使用谷歌电子表格作为临时数据库 我已按照以下教程中的说明进行操作 一切正常 http www alatechsource org blog 2012 05 using the google spreadsheets data ap
  • PHP:如何自动加载接口和摘要

    我有这个自动装载机要自动加载的类classes最初 但现在我想自动加载interfaces and abstracts以及 所以我做了以下改变answer https stackoverflow com questions 7924782
  • 在 PHP echo 中嵌入 javascript

    echo td manuf td 上面的这个行得通吗 我正在从 mysql 数据库中提取结果来编辑内容 但需要 jQuery 功能来编辑它 因此嵌入了 javascript 变量 EDIT 抱歉 缺乏上下文 它与我在这里提出的另一个问题有关
  • 无法使用 ggsurvplot 从列表中使用 survfit 对象绘制 kaplan-meier 曲线

    我正在尝试使用 survminer 包中的 ggsurvplot 绘制 Kaplan Meyer 曲线 当我传递保存在列表中的 survfit 对象时 我无法绘制它 让我以肺部数据集为例 一切正常如下 library survival li
  • Vulkan 管道顶部/底部和 ALL_COMMANDS

    作为很多 初学者 我认为使用 TOP OF PIPELINE 作为 dst 和 BOTTOM OF PIPELINE 作为 src 意味着两者的 ALL COMMANDS Here https github com KhronosGroup
  • Grails 2.0 中带有新 where 查询的参数

    在 Grails 2 0 中定义 where 查询时是否可以使用参数 例如 def query Book where id it Book sub query find 5 我尝试运行该代码 但它在调用 find 时抛出 MissingMe
  • 创建一个包含比原始元素更多元素的 ReactiveUI 派生集合

    是否可以创建一个 ReactiveUI 派生集合 其中包含比原始集合更多的元素 我已经看到有一种方法可以过滤集合并选择单个属性 但我正在寻找相当于可枚举的 SelectMany 操作 为了说明这一点 想象一下尝试获取代表每个陷入交通拥堵的乘