From: Aleksey V Zapparov Date: 2012-07-16T07:25:08+09:00 Subject: Re: How to iterate over nested hashes? --Sig_/gzJrF8+I37zkbjqjQPA6ZmX Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Mon, 16 Jul 2012 05:36:29 +0900 "Andrew S." wrote: > Hi, >=20 > I have a data structure like this: {1=3D>{"foo"=3D>["bar", "baz"]}} >=20 > ...and I can iterate over it with this: >=20 > c.values.each do |foo| > foo.values.each do |bar| > bar.each do |baz| > p baz > end > end > end >=20 > But why can't I do this? (fails): >=20 > c.values.each.values.each.each do |foo| > p foo > end >=20 > Any help much appreciated! >=20 You can do something like this (just an idea) module Enumerable def recursive_each &block (respond_to?(:each_value) ? each_value : each).each do |v| if v.respond_to? :recursive_each v.recursive_each(&block) else yield v end end end end c =3D {1=3D>{"foo"=3D>["bar", "baz"]}} c.recursive_each do |v| puts v end --=20 Sincerely yours, Aleksey V. Zapparov A.K.A. ixti FSF Member #7118 Mobile Phone: +34 677 990 688 Homepage: http://www.ixti.net JID: zapparov@jabber.ru *Origin: Happy Hacking! --Sig_/gzJrF8+I37zkbjqjQPA6ZmX Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQEcBAEBAgAGBQJQA0M3AAoJEGRO9nGLm9Y8RbsIAKoii/yfpAM1DQbb6/PfxCt6 +vFnoro/uSSo7RYkDGa5cPQHzltr1hFz9wMuQ4wrUXNA4YOkn9ToFECx4E7DsZB4 HTRBkprvq5dqOR34RIEPcAwrBxP7m8qWHBDhMA5eqCTozcYXH/mmBitIJ41Zl6oA Ea/gy42El3tGRv3GchwPyuPatn5lYjy+1A9+3V0KpClTAKOYXo7OKKiykuIutojT wiCI8YKmwaparguRC5XlM9SIj2d7UdqeJdKUrliZeTBnrsOCPepKKc/vhVPNfyIx 9ifSo+wYQ3YPFeGQtmElY30Ou/cag1YipJVtV0LAIW9hVSxJGYxkPo4fr/Ly2vM= =v08i -----END PGP SIGNATURE----- --Sig_/gzJrF8+I37zkbjqjQPA6ZmX--