【问题标题】:How to iterate through a Hashie::Mash?如何遍历 Hashie::Mash?
【发布时间】:2015-06-03 00:26:12
【问题描述】:

我想遍历 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,它们产生了["key1", "key2", "key3"]["value1", "value2", "value3"],但我正在寻找显示匹配对的东西,因为它们在哈希中,或者像 ["key1:值 1”、“键 2:值 2”、“键 3:值 3”]。有没有办法在不将单独的数组压缩在一起的情况下做到这一点?

谢谢!

【问题讨论】:

    标签: ruby


    【解决方案1】:

    sub.to_hash 显示的内容完全类似于哈希。 :) 然后你可以用哈希做任何你能做的事情;喜欢

    html << sub.to_hash.to_s
    

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

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

    然而,你真正的问题在于html &lt;&lt; sub.each ...each 返回被迭代的集合,所以你正在做html &lt;&lt; sub;这失败了。如果您刚刚从该行中删除了html &lt;&lt;,您的代码就可以工作,因为连接是在each 循环内处理的。

    【讨论】:

    • 谢谢您,这正是我想要的sub.to_hash.to_s 出品{"key1" =&gt; "value1", "key2" =&gt; "value2", "key3" =&gt; "value3"}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2010-12-18
    • 2017-01-10
    相关资源
    最近更新 更多