У меня есть многомерный массив, такие как:Превратить многомерный массив в хэш без перезаписи значений
array = [["stop", "halt"],["stop", "red"],["go", "green"],["go","fast"],["caution","yellow"]]
И я хочу, чтобы превратить его в хэш, как это:
hash = {"stop" => ["halt","red"], "go" => ["green","fast"], "caution" => "yellow"}
Однако, когда я array.to_h значения перезаписывать друг друга, и я получаю:
hash = {"stop" => "red", "go" => "fast", "caution" => "yellow"}
Как получить нужный массив?
Спасибо, Кэри! Я всего лишь несколько недель в кодировании (на любом языке), поэтому я все еще пытаюсь ознакомиться со многими методами и сокращениями. Я искал статьи для хороших объяснений each_with_object и не могу найти ничего, что действительно помогло бы мне понять это. Вы знаете, где я могу найти хорошее объяснение? Кроме того, существует ли эффективный способ сделать выше, но сохранить все значения в виде массивов? –
Гаррет, нет ничего загадочного в «Перечислении # each_with_object», который дебютировал в версии 1.9. Предположим, что 'a' является массивом, и вы хотите сделать это:' b = []; a.each {| e | b << e + 1; b'; то есть 1. создать объект ('b = []'); 2. делать что-то с каждым элементом 'a'; и 3. вернуть объект ('b'). Это очень распространенная картина. 'a.each_with_object ([]) {| e, b | b << e + 1} 'позволяет сделать это в одной строке, а не в трех. Ни больше ни меньше. Подумайте о методе как «каждый» с объектом ». Я отредактирую для ответа на другой вопрос. –
Спасибо за объяснение и дополнительный код выше! Это добавляет много разъяснений. –