Forum: Ruby parse a tree

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Haris Bogdanoviæ (Guest)
on 2009-03-04 04:55
(Received via mailing list)
Hi.

How can I parse a tree (arrays within arrays), for example a tree of
strings, to print all strings ?

Thanks.
Michael M. (Guest)
on 2009-03-04 05:19
(Received via mailing list)
Haris wrote:
> Hi.
>
> How can I parse a tree (arrays within arrays), for example a tree of
> strings, to print all strings ?
>
> Thanks.
>
>
>
>
tree walking hints at a recursive routine...

def tree_walk(array)
    array.each do |item|
        if item.class == Array
           tree_walk(item)
        else
            puts item
        end
    end
end

or for the one-liners among us
def tree_walk(array)
    array.each { |item| (item.class == Array)? tree_walk(item) : puts
item }
end

However, I don't reccomend testing on the item.class.  I can't explain
why very well, but it seems wrong to me.  Maybe someone else can...?

=======================================================================
This email, including any attachments, is only for the intended
addressee.  It is subject to copyright, is confidential and may be
the subject of legal or other privilege, none of which is waived or
lost by reason of this transmission.
If the receiver is not the intended addressee, please accept our
apologies, notify us by return, delete all copies and perform no
other act on the email.
Unfortunately, we cannot warrant that the email has not been
 altered or corrupted during transmission.
=======================================================================
Peña, Botp (Guest)
on 2009-03-04 05:39
(Received via mailing list)
From: Michael M. [mailto:removed_email_address@domain.invalid]
#..
# def tree_walk(array)
#     array.each { |item| (item.class == Array)?
                           ^^^^^^^^^^^^^^^^^^^^
                           item.is_a? Array

# tree_walk(item) : puts item }
# end


note that the above tree_walk is equivalent to,

  puts array
Brian C. (Guest)
on 2009-03-04 11:08
Michael M. wrote:
> However, I don't reccomend testing on the item.class.  I can't explain
> why very well, but it seems wrong to me.  Maybe someone else can...?

I think it's fine. You need some way to distinguish between a leaf node
and an inner node, and how you do that depends on how your data
structure is built.

Here, the assumption is that inner nodes are Arrays and leaf nodes are
anything else.
Robert K. (Guest)
on 2009-03-04 13:20
(Received via mailing list)
On 04.03.2009 03:51, Haris Bogdanoviæ wrote:
> How can I parse a tree (arrays within arrays), for example a tree of
> strings, to print all strings ?

Do you want to _parse_ or _print_?  This is totally unclear to me.  For
displaying nested structures for debugging purposes, pp will do

require 'pp'

a = [...] # nested
pp a

If you want to parse: you did not provide how the input looks like so
nobody could help you with that.

Kind regards

  robert
This topic is locked and can not be replied to.