2015-01-23 3 views
-1

Как вы можете преобразовать это: "x[a=1,b=2,c=3]", который является строкой, в хэш как { x => {'a'=>1, 'b'=>2, 'c'=>3} } в рубине?Ruby - convert 'array' to hash

+1

Вы имеете в виду хэш? Ваш пример json-объекта не json. Кроме того, этот массив не похож на массив. Просьба уточнить, с чем вы работаете, и что хотите. – ptd

+0

Извините, я имел в виду хэш. честно говоря, я не знаю, как назвать то, что я пытаюсь преобразовать, но это его формат. Я знаю, это ужасно. –

+0

Как вы его получаете? Как строка? Если это так, вы спрашиваете, как разбирать эту строку в хеш, правильно? – ptd

ответ

1

Предполагаю, что первый ключ (x) должен быть строкой.

def foo(str) 
    key, rest = str.split("[") 
    { key => Hash[rest.gsub("]","").split(",").map { |eqn| k, v = eqn.split("="); [k, v.to_i] }] } 
end 

foo("x[a=1,b=2,c=3]") 
# => {"x"=>{"a"=>1, "b"=>2, "c"=>3}} 
+0

Дьявол в деталях. я имел в виду хэш пар ключ-значение. спасибо за указание, что вне –

+0

Это действительно комментарий, но вы не могли бы объяснить это с ограничениями форматирования комментария. Однако нужно было сказать, что +1. Перер, увы, вопрос до сих пор не ясен. Чтобы получить полезный ответ, вам необходимо предоставить контекст того, откуда взялась строка и как вы собираетесь использовать хэш. –

+0

Спасибо @CarySwoveland, исправлено. –