From: Robert Klemme Date: 2013-02-18T06:28:33+09:00 Subject: Re: Select "columns" from multidimensional array? On Sun, Feb 17, 2013 at 9:14 PM, Joel Pearson wrote: > I've attached my attempt at converting your code to suit mine (hope you > don't mind the plagarism :p ) No, it's not a doctoral thesis. :-) (allusion to German politics) > I have a list of some of my plans to add functionality at the top, and > I've rewritten your test at the bottom to suit the new options. > > I'd be interested to know whether there are any things I'm doing > drastically wrong... I think the rows? and columns? might be able to be > done more succinctly, for example. First of all their names seem weird. Methods with a question mark at the end are usually intended to be used in a boolean context. But rows? and columns? return the row and column counts. Plus, they do not gracefully deal with an empty Matrix. I guess for everyday use it will be more efficient to store max values in two members because you will need them often for iteration. Method #array could use Columns's #map method. If you rewrite iteration methods like this def each_row return to_enum(:each_row) unless block_given? (1..rows?).each do |idx| yield row( idx ) end self end Then you can even do def array each_row.map do |row| row.to_a end end And I would consider changing []= to actually remove the entry if the value is nil. (Excel does it differently, I believe. It will not reduce the area it considers "used" when emptying the last cell in the last column or row.) Ah, and I would add a validity check for addresses - otherwise one can get any String into the Hash as key - even things which are not valid addresses. But generally I think you get the hang of it. Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/