Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Rx连接键,而非持续时间_C#_System.reactive - Fatal编程技术网

C# Rx连接键,而非持续时间

C# Rx连接键,而非持续时间,c#,system.reactive,C#,System.reactive,只是看看Rx连接扩展方法。我不太清楚如何使用它来创建键联接(使用关系域而不是时间域) 期望输出: n1: 4, n2: 4 n2: 6, n2: 6 n3: 8, n2: 8 ... 不确定联接是否可以用这种方式使用 编辑 这是可行的,但这样做正确吗(并发性、性能) 重要的是要记住,可观察对象是一段时间内的集合——或者用另一种方式说,它们是一系列事件。对于可枚举项,可以将其视为某一时刻的集合 通过枚举进行连接是有意义的——在进行连接时,所有的值都对您可用 当使用Rx时,它是不同的-它几乎就像你

只是看看Rx连接扩展方法。我不太清楚如何使用它来创建键联接(使用关系域而不是时间域)

期望输出:

n1: 4, n2: 4
n2: 6, n2: 6
n3: 8, n2: 8
...
不确定联接是否可以用这种方式使用

编辑

这是可行的,但这样做正确吗(并发性、性能)


重要的是要记住,可观察对象是一段时间内的集合——或者用另一种方式说,它们是一系列事件。对于可枚举项,可以将其视为某一时刻的集合

通过枚举进行连接是有意义的——在进行连接时,所有的值都对您可用

当使用Rx时,它是不同的-它几乎就像你需要做一些时间旅行

因此,每当你尝试在Rx世界中进行“连接”时,你会说“在一段时间内,请记住可观测a上的所有值,并将它们与该期间可观测B上发生的值进行匹配。”

Rx中的
Join
运算符专门用于定义自定义时间段并观察时间段内发生的事件

经典的情况是,每当一个人进入或离开一个房间,你都会有一系列的事件,你想知道当某个事件(比如说灯打开)发生时,谁在房间里

在某些方面,您的第二个查询,即
SelectMany
查询,只是在两个观察对象的生命周期内发生的连接,Rx必须记住所有值才能生成匹配。它实际上是一对正在构建的集合,并在添加值时执行连接

只要输入序列不太大(这可能仍然意味着大,但不太大是可以的),并且它们最终会终止,
SelectMany
的性能就很好。使用热门的观察对象,如点击事件模式,对其进行
SelectMany
,将是一个糟糕的选择


因此,如果你有一个特定的时间段来加入-使用
join
-但是如果你只想加入两个观察值之间的每个值,使用
SelectMany

很好的答案,我现在意识到我问的问题有点错误。我想的钥匙实际上是时间戳。我基本上想同步两个观测值,当每个匹配的时间戳。所以基本上你可以把范围数作为时间戳。你说得对,我不想做这样的选择,因为可能会有很多数据。PS:当你提到房间时,我不得不谈论这个话题:谢谢你的帮助。我刚刚意识到我想做和这个问题一样的事情:
n1: 4, n2: 4
n2: 6, n2: 6
n3: 8, n2: 8
...
var e = from n1 in right
        from n2 in left
        where n1 == n2
        select new { n1, n2 };