From: MAEDA Shugo Date: 1998-06-23T23:09:03+09:00 Subject: [ruby-list:8486] cursor This is a multi-part message in MIME format. --_------_X-Mailer:.rmp.898610931_------_ Content-Type: text/plain; charset="iso-2022-jp" 前田です。 以前少し話題にのぼった外部イテレータのライブラリを作ってみました。 使い方は、 require "cursor" ary = [1, 2, 3] i = ary.cursor until i.done? p i.current i.next end といった感じです。 def pareach(*args) cursors = args.collect { |i| i.cursor } until cursors.find { |c| c.done? } yield(*cursors.collect { |c| c.current }) cursors.each { |c| c.next } end end ary1 = [1, 2, 3] ary2 = ["one", "two", "three"] pareach(ary1, ary2) { |i1, i2| print i1, ":", i2, "\n" } などとすると並行eachが書けます。 # 並行eachといってもマルチスレッドではないです(^^; Cで書いたのはスピードのためです。 でもやっぱり内部イテレータの方が楽だし速いですね。 ところで、until condよりwhile !condの方が速いのですね。 ちょっと意外でした。 --_------_X-Mailer:.rmp.898610931_------_ Content-Type: text/plain; charset="iso-2022-jp" -- 前田 修吾 --_------_X-Mailer:.rmp.898610931_------_ Content-Type: multipart/x-bfile; boundary="++++++BFile5208961215++++++"; name="cursor.tar.gz" --++++++BFile5208961215++++++ Content-Type: application/octet-stream; name="cursor.tar.gz" Content-Transfer-Encoding: base64 H4sIAICzjzUAA+1ZbW/bNhDOV+tXEN4X2XVc27GddWmzGdnWFEtT1E4KFMMgyDIdqVZkT5S7 Bq3/+44vkqh3tU3cYuMDBJGpeyXvjjzK2vpk7T8+eEj0er3j0QgdIIpe6r/4gcaj4dHxUX80 hud+73gwOECjB7VKYEsC00fogNjbm3UpHfbJPgzaLyy+/vxf13oQHbDA4+GwaP37o+P+ILX+ g+FR/wD1HsSaFP7n6/+4jcK112AxztabO9+5sQOkn7VQ/8mTHxGa0ZlBL028MNFTNk2/bNZd 0zE9HHQ93H23OUXtx5r2g+NZ7naBgShYOOuufSqNNf3t/K5rN6UREtDfGv4QYN9DbyYX178h a+L75t1JavDcJHZ6bBb4jndzommwfoFjhcNnzJmT1CiTmv+Kyp7MSeCbVlBMUfzmD1wi+I3p bnH+a25/+A5e+lsrQJPp27Pr6ezVFH2ky4HE8JQ5gNqmD3NDxx0vQM7iw4m2i3nPJ7PzXGZq CWrbbBITzJzICMy5iw3sBT6oYP8ScmdX01yx3APUht+5RjFv36+dBTIt49b0V3rGyfbCDMyW xuXeCCo6dngKrrZAUmp9YdTg8arzAYLdZShAzKyYUsnUlEKwjr48s7G1Mq7uNlinUjroyphM p5O3Lc7L5aBn6FdgMV6aK2zMmDhdDqdORkdHazQavLQJvzuo10HMUy45chCET5lKZkDiLcwj vO3xIR8HW4j80LPMpFiGQ4zF2sM5k1I6Bcy15zgIPePzkPFINl7YElt5+ix26PDUxR76Gb0G CRj9hF4vTZfgXIvBGR9ibQ8WO0ukl5jb0hrCp9ee43IWDFZHwxL5JvD/jET9leuXB2VqD05F Vjx6lFgX7kOOXT4meK+GZcI3bRorDXayNEg1rKQ20FKWUxwsH5sBNujbZJGgIx1BtHJNQior RtqObMngMq8MSllZMZjSTlZ4J/Q/v0RQHbRGUAZdOB2/5QX7Gbq8vrjg40vQricXQFqPp5LU w9Ng7h6eettbY+545ESOpxbU+UacNBI5JZXinxFm7aliO+FMc1itFTzvmOm7OoWOrewKl2wB oYBsJPDQTW7ZOTHEWN7TbfsrlUhbf5Gar1NQLLvGdlAQ36X5Lodt0YYgYoAHZY2NwK4qmPdo aBzSzEqo+3lxy35BZoBVuWyhcyz4kwlHSzHf+eslXZpYpF5SaUX65fpQmnuNMPF42uXlX/4m YlduIve4WP/1Elc4xZXnogfMCOos1wtWgpv0tO3hfwb6ABga9NdmS2wdXnYQN7CVzBqozTUp fWyt/QUlFhMC/7hRO3b6oqZkjmW7vAkDnd+ofAj7imYi5yhZuOpsx/kO3eDLVMMTdpgjycNc 3DiWnOWANmcPg9Ev6PNSCov7PCB8cfm8utGTm/RORovU6ZGyYxzw0VMcV/p1rR6psbfnz0Jp rMQu1Wv1gK1uq0dqlLR7s7ig1QvNrWz1XlxeDS6vX+oSW7LlywvVqiPMvXn3eT0fqdyu79+w 4p6P1YcXnhOEaR3aIm7sgNOfGwu8dDw4edN2SW/yN004776av8NWEIbl3Nh6QGnc4sBeL/Sz i8lsZrz6XReiWh3UhF2r2RIOydc1WTVMli/udIAzVhodsIVSwSW0RgxWyBDfTUEZKGcLK0qT ZvLPlDfK6/q8Iq04t/hRn5vGLGelT/X5WExxRvbIOflEZ+9Si+f7nPXPzSR5k5VUQHLypX6n UmBSUI5JssyoE6wUG1GGkvP9lYVLHWCleIlWUlCmIrtOQlQUj1LfWLa8gi1uq0PWeKQGu9wy hwLksSoRSR+lzLBrZUauCBHidnWI57KHkW4nIr1YQE5i2rUSM8EMs84Z4aE2E5tpzsYeqxij aE5bW0OpFKppbkk3TwP5/FScA5zqc2pvxBEFXHxgLLM/eZ6LYozUirEUc+w5qbXKKXYRnKQ6 OFOMYViSRFjutC/7/ie+/4IJ1tpbdv35/X5eZECl338BI/H9d9Ab9XpH9Pvv+Gisvv/uAz7+ e+v4GDVvV7fLpqaJO8db6IKWjov1MMNaXxhfCt83RP5vTFh3y/42+X/UH/L8Hw9Ho/GQ5f+w p/J/H4jyX+S5psHug0Q46G3TvyEtLbwjIexO8IZ0rbXrQkOGPqJPzifkdMUVCr3h3HqB44b0 XdjIFpTK+oSsLttuxTXonYPdhd4O6SSBjFTsp2jXkq5oSJcaFdHQfZNJw95Co3/fei4VFBQU FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9oF/AWEjsPMAUAAA --++++++BFile5208961215++++++ Content-Type: application/x-be_attribute; name="cursor.tar.gz" Content-Transfer-Encoding: base64 --++++++BFile5208961215++++++-- --_------_X-Mailer:.rmp.898610931_------_--