2009/4/20 Yoann M. removed_email_address@domain.invalid:

Hello, I’d like to use a specific matrix with string as key for lines

and integer index for columns. I could also use string for columns (a

string version of integer), it doesn’t matter. I use the matrix to store

a small object (named State) I just need to access data like that :

matrix[a_string][a_number]

Here is how I tried to do it :

matrix = Hash.new{ |hash, key| hash[key] = Array.new(5, State.new(0,

“”)) }

You want the block form of Array.new because otherwise all array

entries point to the same object:

matrix = Hash.new{ |hash, key| hash[key] = Array.new(5) {

State.new(0,"") } }

Alternative approach: use an Array of String and Fixnum as Hash key:

class Matrix

def initialize

@hash = Hash.new {|h,k| h[k] = State.new(0, “”)}

end

def

@hash[[row, col]]

end

def []=(row,col, val)

raise ArgumentError, “Not a state %p” % val

@hash[[row, col]] = val

end

end

This is likely more efficient if your matrices are large and sparse.

Kind regards

robert