Есть ли Ruby-эквивалент Perl Data :: Rmap?

Perl Данные :: Rmap позволяет вам рекурсивно оценивать BLOCK по списку структур данных (локально устанавливая $ _ для каждого элемента) и возвращать список, состоящий из результатов таких вычислений. $ _ можно использовать для изменения элементов.

Это полезно для перебора таких вещей, как вложенные хэши или иерархии массивов хэшей и т.п.

Инструмент Python Смотрите также:, который делает что-то подобное stackoverflow.com/tags/marshmallow/info

dreftymac 29.06.2018 23:48
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
1
188
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не вдаваясь в подробности, я не уверен, что вам нужен модуль для этого в Ruby. Итераторы и блоки предназначены для того, чтобы делать то, что вы хотите.

Редактировать, чтобы опубликовать пример или ссылку на пример случайно?

dreftymac 07.01.2009 03:12

Проверьте ответ Гая, в нем есть подробности :)

Keltia 07.01.2009 12:19
Ответ принят как подходящий

Думаю, Ruby Enumerable делает все, что вы хотите. «... и вернуть список, состоящий из результатов таких оценок» означает, что вам нужен Enumerable#map. Моя первая попытка была бы примерно такой:

[ {...}, {...}, {...}, ... ].map do |hash|
  hash.something
  do_other_stuff_with(hash)
  hash                  # important to have as last line b/c of how #map works
end

AFAICT, это не эквивалентно, потому что Data :: Rmap работает не только с ArrayOfHash (AoH). Он также может перебирать более сложные структуры, такие как ArrayofArray (AoA), HashofArray (HoA) и другие (AoAoH), (HoHoA) и т. д. До бесконечности.

dreftymac 07.01.2009 19:24

.map с радостью будет работать с массивами вещей, кроме хэша. Чего он не сделает, так это рекурсии. Может быть, нужен Y-комбинатор?

James A. Rosen 08.01.2009 00:21

Другие вопросы по теме