2016-10-28 4 views
0

Я пытаюсь написать функцию в Ruby, которая может принимать a в массиве массивов и преобразовывать ее в хэш. Это будет использоваться для имитации предложений и создания произвольных последовательностей слов. Полученная карта будет полезна при создании всей комбинации предложений, доступных с текущими правилами предложения.Создание карты из массива массивов в Ruby

Как я могу достичь этого? Я немного потерял, с чего начать.

+0

Добро пожаловать в SO. Мы хотели бы видеть вашу попытку решить это, а не запрос на код. Пожалуйста, прочитайте «[ask]», в том числе связанные страницы, «[mcve]» и «[Сколько усилий ожидается от пользователей Stack Overflow?] (Http://meta.stackoverflow.com/q/261592)». В настоящее время ваш вопрос преждевременен; Попробуйте, попробуйте, попробуйте еще несколько, а затем задайте конкретный вопрос об одной части вашего кода. –

ответ

2

Попробуйте это:

arr = [ ["<start>", "The <object> <verb> tonight."], 
     ["<object>", "waves", "big yellow  flowers", "slugs"], 
     ["<verb>", "sigh <adverb>", "portend like <object>", "die <adverb>"], 
     ["<adverb>", "warily", "grumpily"] ] 

arr.map { |ar| [ar.shift, ar.map { |str| str.split }] }.to_h 
#=> 
#{ "<start>" => [["The", "<object>", "<verb>", "tonight."]], 
# "<object>" => [["waves"], ["big", "yellow", "flowers"], ["slugs"]], 
# "<verb>" => [["sigh", "<adverb>"], ["portend", "like", "<object>"], ["die", "<adverb>"]], 
# "<adverb>" => [["warily"], ["grumpily"]] } 

ar.shift принимает первый элемент каждой подрешетки. Блок, используемый с ar.map, разбивает (по пробелам) оставшиеся элементы на массивы. Наконец to_h преобразует результирующий массив в хэш.

+0

Спасибо, его работа! Можете ли вы дать мне немного объяснения, что происходит? – FlameDra

+0

@FlameDra конечно, я обновлю свой ответ :) –

+0

@ sagarpandya82 Я обновил ваш ответ. Так лучше для меня. Проверьте, нравится ли вам;) – Ursus

Смежные вопросы