Как мне разобрать эту пару ключ-значение? - PullRequest
0 голосов
/ 06 августа 2010

Это результат выполнения puts get_account_entry.inspect

[[{:value=>"8b08e26a-6d35-7140-9e41-4c5b4612c146", :name=>"id"}, {:value=>"Typhoon Corporation", :name=>"name"}]]

Как извлечь, например, значение: name => "id"?Первоначально я думал, что это похоже на хеш, поэтому get_account_entry [id] даст результат, но это не имеет смысла при ближайшем рассмотрении.

Но тогда как мне получить значения?

Чак направил меня по правильному пути, но все равно нужна помощь:

  puts get_account_entry[0].map {|hash| [hash[:name], hash[:value]] }

Это вывод в консоли ruby:

> id
> 8b08e26a-6d35-7140-9e41-4c5b4612c146
> name 
> Typhoon Corporation

Ответы [ 3 ]

2 голосов
/ 06 августа 2010

Ты близко к праву. Это массив, содержащий массив Hash, которые вместе образуют своего рода Hash-подобную структуру. Чтобы получить значение с соответствующим именем «id», вам нужно будет сделать get_entries[0].find {|field| field[:name] == 'id'}[:value]. Начальный [0] возвращает нас внутрь бессмысленного внешнего массива, а затем нам нужно найти, какой хеш имеет :name запись "id", затем мы запрашиваем значение его :value записи.

Если вы хотите преобразовать эту структуру данных имя-значение в обычный хеш, вы можете сделать Hash[get_entries[0].map {|hash| [hash[:name], hash[:value]] }].

0 голосов
/ 06 августа 2010

Вот как бы я подошел.

a= [[{:value=>"8b08e26a-6d35-7140-9e41-4c5b4612c146", :name=>"id"}, {:value=>"Typhoon Corporation", :name=>"name"}]]

a[0].each do |hash|
  hash.each_pair do |k,v|
    puts v
  end
end

Надеюсь, это поможет.

0 голосов
/ 06 августа 2010

В самых внешних квадратных скобках «[]» говорится, что эта сериализация представляет собой массив.

Вы пробовали что-то вроде get_entries [0] [id] (или get_entries[0] [0] [id] , так как это двойная скобка)?

...