Partitioning
RX也可以让你的队列进行分组,可用于单值队列对多个订阅者开放或聚合分组的场景。
MinBy and MaxBy
MinBy和MaxBy操作允许根据一个key selector(Func类型委托)方法来区分队列。这两个方法都返回根据key划分的最大值或最小值。
Min和Max操作都各自有一个接受一个comparer的重载,允许比较自定义类型,或者按自定义的方式排序。一个从0到10的队列,如果我们使用一个以3为系数将values分组的key selector,将会有3个组,其KEY和值如下:
这里我们可以看到最小的KEY是0,最大的是2(因为key selector规定了是以元素除以3的余数来进行分组),因此MaxBy操作将从list[2,5,8]中返回一个最大值,而MinBy操作将从list[0,3,6,9]中返回一个最小值,它们,储存于IList<T>中。
如果需要的不是KEY的最大和最小而是值的最大和最小,就需要看看GroupBy方法。
GroupBy
GroupBy操作可以像IEnumerable<T>的GroupBy操作一样分割你的队列,并返回一个IObservable<IGroupedObservable<TKey, T>>。
后两个重载有些多余,因为我们可以听过与Select方法组合来实现相同效果。
IGroupedObservable<T>是IObservable<T>的扩展,只多了key属性。
使用GroupBy操作来获取每个key的最小/最大值,我们可以先分组队列,然后对每个分组进行Min/Max操作:
上面的代码并不是好的实现,订阅互相嵌套,并且失去了对嵌套的控制,还很难阅读。在这种情况下,我们可以使用SelectMany方法,我们将在之后介绍
暂无关于此日志的评论。