在ruby中你如何映射嵌套的哈希树但跳过第一个元素?

时间:2016-12-17 14:36:48

标签: ruby-on-rails ruby

我想忽略哈希树的第一个元素,因为它有不同的表示,只是映射所有元素减去第一个元素。这样我的递归函数就可以了。所以在我的comments.map循环中,我想忽略第一个元素或删除它。

    def horizontal_tree_for(comments)
        comments.map do |comment, nested_comments|


       entry(comment) + 
          (nested_comments.size > 0 ?          
              content_tag(:div, horizontal_tree_for(nested_comments), class: "branch") +
            "</div>"

          : "</div>")



    end.join.html_safe
  end

def entry(comment)

  "<div class='entry'><span class='label'> #{comment.name} </span>"

end

2 个答案:

答案 0 :(得分:2)

忽略每个嵌套级别的第一条评论

替换

    comments.map do |comment, nested_comments|

    comments.drop(1).map do |comment, nested_comments|

忽略仅限第一级的第一条评论

致电

horizontal_tree_for(root_comments.drop(1))

并且不要更改方法中的任何内容。

答案 1 :(得分:1)

您有两个主要选择:

  • map来自一个数组,该数组由给定散列的第一个键值对组成,然后对该数组进行操作;或
  • 构建一个新阵列。

假设

h = { :a=>1, :b=>2, :c=>3 }

@Eric提供了一种从散列派生的数组映射的好方法:

h.drop(1).map { |k,v| <your code> }

作为

h.drop(1)
  #=> [[:b, 2], [:c, 3]]

构建新阵列:

h.each_with_index.with_object([]) do |((k,v),ndx),a|
  next if ndx.zero?
  a << <your code, using k and v>
end