Картирование и выбор одновременно - PullRequest
3 голосов
/ 22 марта 2012

Есть ли хороший способ для map и (select или delete_if) одновременно?На данный момент я делаю одно из следующего, но мне было интересно, есть ли лучший способ.Кроме того, я не могу использовать второй, если я хочу получить ложное значение в результирующем массиве.

some_array.select{|x| some_condition(x)}.map{|x| modification(x)}

some_array.map{|x| modification(x) if some_condition(x)}.compact

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Почти то же самое, чтобы уменьшить или ввести

new_array = some_array.each_with_object([]) do |m,res|
  res << modification(x) if some_condition(x)
end

Разница в том, что вам не нужно ставить результат в конце блока.

2 голосов
/ 22 марта 2012

Как насчет этого?

new_array = some_array.inject([]) do |arr, x|
  some_condition(x) ? arr << modification(x) : arr
end

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

...