2015-07-24 2 views
1

У Perl есть очень хорошая документация combinations of arrays and hashes, но я не могу найти ее для Ruby.Как я могу поместить массив хэшей в хэш в Ruby?

Когда я пытаюсь

data = { 
    "key" => "value", 
    [{"name"=>"abc", "number"=>898, "email"=>"[email protected]"}] 
} 

p data 

Я получаю следующее сообщение об ошибке. Что я делаю не так?

test.rb:3: syntax error, unexpected '\n', expecting => 

ответ

1

Здесь вы объявляете хэш и устанавливаете его в переменную data. Поэтому рубиновый ожидает синтаксис:

key => value 

Но ваш второй элемент не в такой форме, это только значение (массив), не существует ключ, связанный! Я не знаю о Perl, но Ruby этого не допускает. Вы можете сделать:

data = { 
    "key" => "value", 
    "key2" => [{"name"=>"abc", "number"=>898, "email"=>"[email protected]"}] 
} 
6

Хэш должен быть ключевым значением пары. Однако ваш второй элемент не является:

[{"name"=>"abc", "number"=>898, "email"=>"[email protected]"}] 

Это должно быть что-то вроде:

data = { 
    "key" => "value", 
    "array" => [{"name"=>"abc", "number"=>898, "email"=>"[email protected]"}] 
} 

Как вы можете видеть, что я добавил новый ключ "array", который имеет значение [{"name"=>"abc", "number"=>898, "email"=>"[email protected]"}]. Так как это соответствует определению хэша, ошибок не будет. Вы можете назвать свой ключ чем угодно, пока он у вас есть.

-1

Не знаю, почему у вас есть хэш внутри массива? Это необходимо? может быть потому, что массив не имеет ключа, попробуйте это

data = { 
    "key":"value", 
    array:[hash:{"name":"abc", "number"=>898, "email"=>"[email protected]"}] 
} 
6

Возможно, вы имели в виду это, «сочетание массивов и хэшей»

data = [ 
    { "key" => "value"}, 
    [{"name"=>"abc", "number"=>898, "email"=>"[email protected]"}] 
] 

Вот это массив из двух элементов: хэш и массив хешей. Будь то то, что вы хотите или нет - я не могу сказать (из вашего вопроса).

+2

интересные перспективы. Это совсем не произошло со мной :) – shivam

+0

Согласен. Я отредактировал заголовок вопроса, чтобы согласовать его с интерпретацией @shivam, хотя это тоже хорошо. – onebree

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