Вопрос по .net, c# – Выберите Много в Rx [закрыто]

6

Пожалуйста, дайте мне знать, какSelectManyператор @ в Rx работает. Я не знаю больше об этом операторе в Linq.

Пожалуйста, объясните это с помощью простого примера, а также, в каком случае мы будем использовать этот оператор в Rx.

Ваш Ответ

1   ответ
17

SelectMany объединяет проекцию и выравнивание в один шаг. Предположим, у вас есть несколько списков, таких как{ {1, 2}, {3, 4, 5}, { 6, 7 } } вы можете использоватьSelectMany чтобы свести его в один список, например:{ 1, 2, 3, 4, 5, 6, 7}

SelectMany в Rx может объединить несколько последовательностей в одну наблюдаемую (на самом деле существует несколько перегрузок).

Для практического примера, предположим, у вас есть функцияDownloadFile(filename), который дает вам Observable, который выдает значение, когда файл завершает загрузку. Теперь вы можете написать:

string[] files = { "http://.../1", "http://.../2", "http://.../3" };

files.ToObservable()
                 .SelectMany(file => DownloadFile(file))
                 .Take(3)
                 .Subscribe(c => Console.WriteLine("Got " + c) , ()=>  Console.WriteLine("Completed!"));

Все 3 наблюдаемыхDownloadFile сведены в единое целое, поэтому вы можете подождать 3 значения, чтобы увидеть, что все загрузки завершены.

СSelect, у тебя получится наблюдаемая из наблюдаемых. Asti
Я не мог понять, почему вы использовали SelectMany здесь, в вашем коде, у вас нет списка списков -> вы не получили никакого сплющивания, я имею в виду, как будет отличаться результат в вашем коде, если вы просто использовали select ? Mohammed Noureldin

Похожие вопросы