Заполните новый массив из другого массива символов - PullRequest
1 голос
/ 07 марта 2011

У меня есть вопрос о массивах Ruby, но его сложно описать, поэтому я не смог найти много, прочитав другие вопросы.Вот.

В настоящее время у меня есть следующий код, который работает (часть таблицы Prawn)

Фрагмент A:

  students = all_students.map do |student|          
      [
      student[:first_name],
      student[:last_name],
      student[:email],
      student[:given_name]
      ]
  end
  pdf.table students

Это отлично работает, но теперь я хотел бы опуститьнекоторые из столбцов (например, не показывают last_name).Скажем, я получил массив имен столбцов, скажем, selectedColumns:

Фрагмент B:

  pickedColumns = []
  pickedColumns << :first_name << :email << :given_name  #NOTE: no (:last_name) there!

  students = all_students.map do |student|
      studentCols = pickedColumns.each do |studentCol|
        student[studentCol]
      end
  end
  p.table students

Я не смог добиться эффекта фрагмента A, используя замененный код вфрагмент B. Все, что я получаю в фрагменте B, не является действительными значениями «student [: first_name]», а просто строкой «first_name» для каждой строки.

Если мое описание не на 100% понятно, пожалуйста, дайте мне знать.

Спасибо за помощь!

С уважением

1 Ответ

3 голосов
/ 07 марта 2011
students = all_students.map do |student|
  studentCols = pickedColumns.each do |studentCol|
    student[studentCol]
  end
end

Сделать это

students = all_students.map do |student|
  pickedColumns.map do |studentCol|
    student[studentCol]
  end
end

и это будет работать.

PS: Чтобы придерживаться соглашения об именах ruby, вы должны изменить имена переменных, чтобы использовать все строчные и подчеркивания, а не camelCase.

...