首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在可观测对象列表上使用RxCpp运算符?

如何在可观测对象列表上使用RxCpp运算符?
EN

Stack Overflow用户
提问于 2020-01-01 14:11:27
回答 2查看 488关注 0票数 1

我想在RxCpp可观察对象的列表/数组上使用zip运算符,但RxCpp运算符只接受可变参数,并且我的列表的大小是动态的(在运行时已知)。

有没有办法在可观察到的列表上使用这些运算符?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-01 19:55:41

这是一个天真的尝试,迭代地将每个可观察对象压缩到一个向量中,并累加结果:

代码语言:javascript
复制
template <typename T>
rxcpp::observable<std::shared_ptr<std::vector<T>>> zip_v(const std::vector<rxcpp::observable<T>>& observables) {
    // map the first observable to convert values to a single-element vector
    auto it = observables.cbegin();
    rxcpp::observable<std::shared_ptr<std::vector<T>>> acc = it->map([](T t) {
        return std::make_shared<std::vector<T>>(std::initializer_list<T>{ t });
    });

    // fold each observable into accumulator by zipping, and pushing back value
    while (++it != observables.cend()) {
        acc = acc.zip([](std::shared_ptr<std::vector<T>> acc, T next) { 
            acc->push_back(next);
            return acc;
        }, *it);
    }
    return acc;
}

使用示例:

代码语言:javascript
复制
    std::vector<rxcpp::observable<int>> sources{
        rxcpp::observable<>::range(1, 5),
        rxcpp::observable<>::range(6, 10),
        rxcpp::observable<>::range(11, 15)
    };
    zip_v(sources).
        take(3).
        subscribe(
            [](auto vs){
                for (auto& v : *vs) {
                    printf("%d ", v);
                }
                printf("\n");
            },
            [](){ printf("complete\n"); });

输出:

代码语言:javascript
复制
    1 6 11
    2 7 12
    3 8 13
    OnCompleted
票数 1
EN

Stack Overflow用户

发布于 2020-02-26 17:13:14

在RxCpp的github页面上发布了这个问题后,有人建议我使用iterate函数。

代码语言:javascript
复制
std::array< rxcpp::observable<int>, 3 > a={{rxcpp::just(1), rxcpp::just(2), rxcpp::just(3)}};
auto values = rxcpp::observable<>::iterate(a);
values.
    merge().
    subscribe(
        [](int v){printf("OnNext: %d\n", v);},
        [](){printf("OnCompleted\n");});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59550345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档