Hashed matrix

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,
“”)) }

But I have strange values, is there a better way to make that matrix ?

2009/4/20 Yoann M. [email protected]:

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

2009/4/20 Robert K. [email protected]:

end

def
@hash[[row, col]]
end

def []=(row,col, val)
raise ArgumentError, “Not a state %p” % val

This should have read

raise ArgumentError, “Not a state %p” % val unless State === val

Thanks for your answer, you’re right I had the same object in my array,
this is why I had strange values.
I use a really small matrix so it’s not a big deal to be efficient, I’ll
use your first idea.

Thank you.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs