Вложенный массив Печать внутреннего массива в пустую строку - Ruby - PullRequest
0 голосов
/ 20 февраля 2019
address_book = [
['Company1','123 Mission Blvd', 'San Francisco','California', 12345, '415-555-4444','CompanyOne@companyone.com','https://company1.com'], 
['Company2','77 Market Street', 'San Francisco','California', 94111,'415-444 4444','Company2@company2.com','https://company2.com']
]

У меня есть адресный блок, который я хотел бы перебрать и отправить в пустую строку ниже.

email_temp = ""


address_book.each do |address_block|
  address_block.each do |company_name, address, city, state, zip, tel, email, web_address|
    email_temp << "Company Name: #{company_name} #{address} #{city} #{state} #{zip} Tel: #{tel} #{email} #{web_address}"
  end
end

Я начал с вышеупомянутого, но на каждой итерации он печатает Название компании перед каждым элементом внутреннего массива.Как это исправить?Я хочу, чтобы все было очень просто.Просто пытаюсь понять, что идет не так.

1 Ответ

0 голосов
/ 20 февраля 2019

Следующее использование некорректно, если массив один:

address_block.each do |company_name, address, city, state, zip, tel, email, web_address|

Поскольку address_block является массивом, и только 1 аргумент передается блоку как член массива.

Таким образом, вы изменили бы его с помощью следующего фрагмента кода.

address_book.each do |address_block|
  email_temp << "Company Name: #{address_block.first} "
  email_temp << address_block[1..4].join(' ')
  email_temp << " Tel: #{address_block[5]} #{address_block[6..7].join(' ') }"
end

ОБНОВЛЕНИЕ Благодаря @ sebastian-palma я узнал новое о рубиновых блоках, когда речь идет о вложенных массивах.Поэтому я обновляю решение для этого вопроса.Но я не рекомендую это решение из-за запахов кода.

address_book.each do |company_name, address, city, state, zip, tel, email, web_address|
  email_temp << "Company Name: #{company_name} #{address} #{city} #{state} #{zip} Tel: #{tel} #{email} #{web_address}"
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...