如何将可枚举的xys
的可观察量转换为可观察的yxs
枚举,其中yxs
的每个可观察量都集中在{{1}的每个时间步长的特定元素上}}?我想要的是类似于可枚举的可枚举的转置。
示例:
xys
我特别感兴趣的是已经是Rx一部分的功能。与上面的例子一样,无限可观测量应该是可能的以及无限的可枚举。
答案 0 :(得分:2)
这会正确转换您的“类型”。但是,您无法更改元素何时/如何在下面传递的语义,因此无论您如何处理此元素,您最终都将最终进行缓冲和阻止。
dest = source.ToEnumerable().Map(x => x.ToObservable());
答案 1 :(得分:-1)
这是我到目前为止所提出的。但是,它是一个自制的解决方案,而不是Rx的一部分。如果有人向我指出涉及图书馆功能的解决方案,我将不胜感激。
public static IEnumerable<IObservable<T>> ObserveElements<T>(this IObservable<IEnumerable<T>> obs)
{
var i = 0;
while (true)
{
var idx = i++;
yield return from enumerable in obs
let x = enumerable.ElementAtOrDefault(idx)
where !Equals(x, default(T))
select x;
}
}
显然,你.Take()
只会根据需要提供尽可能多的观察结果。
在Haskell术语中,我认为它实际上是sequence
monad的IObservable
实现,专门用于IEnumerable
。