如何迭代Hashie :: Mash?

时间:2015-06-03 00:26:13

标签: ruby

我想循环使用Hashie :: Mash的键和值。

我试图这样做:

html = "Just look at these subscriptions!"
client.subscriptions.each do |sub|
  html << sub.each do |key, value|
      html << key.to_s
      html << " = "
      html << value.to_s
  end
end

它返回以下错误:

“无法将Hashie :: Mash转换为字符串(Hashie :: Mash#to_str给出NilClass)”

我已尝试生成sub.keys.to_ssub.values.to_s的{​​{1}}和["key1", "key2", "key3"],但我正在寻找显示匹配对的内容,因为它们位于hash,或者像[“key1:value1”,“key2:value2”,“key3:value3”]。有没有办法在不将单独的数组压缩在一起的情况下执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:3)

sub.to_hash显示完全的内容,就像哈希一样。 :)那么你可以做任何你可以用哈希做的事情;像

html << sub.to_hash.to_s

或者你可以用更多的Rubyish方式做你正在做的事情:

html << sub.map { |key, value| "#{key} = #{value}" }.join(", ")

但是,您的真正问题在于html << sub.each ...each会返回正在迭代的集合,因此您正在执行html << sub;这失败了。如果您刚从该行中删除了html <<,那么您的代码就可以正常工作,因为each循环内部会处理连接。

相关问题