Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Выберите "Многие" в Rx

Автор вопроса: StezPetОтветов: 3

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

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

  • stackoverflow.com/questions/3869329/ Mitch Wheat 09.04.2012
  • Это кажется немного сложным .. я новичок в этой технологии. можете ли вы предоставить простой образец StezPet 09.04.2012

Ответы

Ответ 1 · рейтинг 22 · Asti

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 значений, чтобы убедиться, что все загрузки завершены.

Ответ 2 · рейтинг 24 · Ana Betts

SelectMany просто:

source.Select(selector).Merge();

Другими словами, он выбирает входные данные источника в поток Observable, а затем объединяет каждый Observable в поток результатов.

Ответ 3 · рейтинг 10 · yamen

Я нашел это короткое видео полезным для понимания SelectMany для Rx (и как более продвинутое использование мраморных диаграмм): http://channel9.msdn.com/Blogs/J.Van.Gogh/Reactive-Extensions-API-in-depth-SelectMany

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы