From: Mason Kelsey Date: 2009-09-21T12:23:21+09:00 Subject: Re: Multi-Dimensional Arrays in Priority Queues --0016364ed56ed8a4c304740e00a4 Content-Type: text/plain; charset=ISO-8859-1 Tried it but it didn't work. Made the following change: require "pqueue" pq=PQueue.new(proc{|x,y| x[0]ruby simple_pqueue.rb simple_pqueue.rb:3: undefined local variable or method `x' for main:Object (NameError) from ./pqueue.rb:24:in `[]' from ./pqueue.rb:24:in `upheap' from ./pqueue.rb:65:in `push' from simple_pqueue.rb:5 >Exit code: 1 The "from" error messages appear to be coming from the code inside of the pqueue class methods. Doesn't like the brackets. I tried several variations of this and also got a message that said the < is an invalid method. Very strange. Sorry but I'm totally confused here. There must be a way to do this. No Sam On Sun, Sep 20, 2009 at 10:31 PM, Mario Camou wrote: > Hi, > In the line: > > pq.push([2], [123456780], [123456708]) > > you're not passing in a multi-dimensional array, you're passing 3 > parameters > each of which is an array. Try with: > > pq.push([[2], [123456780], [123456708]]) > > (notice the double [ at the beginning and the double ] at the end). > > you will also have to change your PQueue creation to something like this: > > pq=PQueue.new(proc{|x,y| x[0] > Haven't tested this in irb but it (or something very much like it) should > work. > > -Mario. > > -- > I want to change the world but they won't give me the source code. > > > On Mon, Sep 21, 2009 at 04:25, Mason Kelsey wrote: > > > In my program I need to construct a priority queue that sorts ascending. > > The basic idea can be expressed in the following simple code that uses a > > Priority Queue concept. See: > > http://www.math.kobe-u.ac.jp/~kodama/tips-ruby-pqueue.html > > > > 1 require "pqueue" > > 2 > > 3 pq=PQueue.new(proc{|x,y| x > 4 pq.push(2) > > 5 pq.push(3) > > 6 pq.push(4) > > 7 pq.push(3) > > 8 pq.push(2) > > 9 pq.push(4) > > 10 print "size:"+pq.size.to_s+"\n" > > 11 print "each_pop: " > > 12 pq.each_pop{|x| print x.to_s+" "} > > 13 print "\n" > > > > This is clean and simple to understand. But I need to be able to put > into > > the queue several components per push to make an entire record object. I > > need to have three components: an integer heuristic value, followed by > two > > 9 > > digit configuration patterns, such as > > pq.push([2], [123456780], [123456708]) But this gives me an argument > error > > message: > > pqueue.rb:4:in `push': wrong number of arguments (3 for 1) > > (ArgumentError) from pqueue.rb:4 > > > > or pq.push(2_123456780_123456708) ignores the underscore separators and > > runs > > the 3 parts together as one long number. > > > > Still learning Ruby and none of the books address multiple dimensional > > arrays very well. Is the Priority Queue not able to handle > > multi-dimensional arrays? Can this code be modified to allow > > multi-elements > > in each push and still sort on the first element? > > > > If I cannot use pqueue, is there another required library of methods that > > will work with three elements in each array entry? > > > > Thanks in advance to those of you who can help. And thanks to all who > help > > out on this forum. Very good forum. > > > > No Sam > > > --0016364ed56ed8a4c304740e00a4--