Array question - How dynamic is dynamic?

Hello all you happy people!

I have been thinking about asking this question but did not know how to
start.
So, if my question is ambiguous please let me know and I will try to
make it
clearer.

Given an NxN array or even an NxM array mA from which at times I break
it
into sub arrays, I would like to be able to manipulate the sub arrays
and
have the changes dynamically propagated to the main array mA.
For example, assume I have main array mA as listed below.
From mA I strip say row[2], which I named sAr2 and which has values:
sAr2 =
[D, C, B, A]
I also created sub arrays of columns, as listed below and furthermore, I
created quadrants sub arrays.

I would like to make a change on any of the sub arrays and have that
change
propagated simultaneously to the main array.
For instance, say I set sAr2[1] = Y, I would like element mA[2,1] to
change
to Y from C.
The same should happen if and when I change any of the sub arrays.
The same should happen if and when I change the main array.

Is this possible say in 1.9.1? or do I need some kind of GEM?

Main Array:

mA = [
[A, B, C, D],
[B, A, C, D],
[D, C, B, A],
[C, A, D, B]
]

Sub Arrays:
sAr0 (sub array row 0 to row n, where n is 3 for this case)
sAr0 = [A, B, C, D]
sAr1 = [B, A, C, D]
sAr2 = [D, C, B, A]
sAr3 = [C, A, D, B]

sAc0 (sub array column 0 to column n, where n is 3 for this case)
sAc0 = [A, B, D, C]
sAc1 = [B, A, C, A]
sAc2 = [C, C, B, D]
sAc3 = [D, D, A, B]
Four “quadrants?” arrays as follows:
qA1:
[[A, B
B, A]]

qA3:
[[B, D A, B]]

Etc.

Thank you

On Tue, Apr 7, 2009 at 2:50 PM, Ruby S. [email protected]
wrote:

For example, assume I have main array mA as listed below.
From mA I strip say row[2], which I named sAr2 and which has values: sAr2 =
[D, C, B, A]
I also created sub arrays of columns, as listed below and furthermore, I
created quadrants sub arrays.

I would like to make a change on any of the sub arrays and have that change
propagated simultaneously to the main array.
For instance, say I set sAr2[1] = Y, I would like element mA[2,1] to change
to Y from C.

First thing that came to mind is to add a level of indirection, so
that the array doesn’t
contain the actual values, but an object that contains the values, like
so:

irb(main):001:0> O = Struct.new :value
=> O
irb(main):008:0> A = “A”
=> “A”
irb(main):009:0> B = “B”
=> “B”
irb(main):010:0> C = “C”
=> “C”
irb(main):013:0> myAr = [[O.new(A), O.new(B), O.new©],[O.new(B),
O.new(A), O.new©],[O.new©, O.new(B), O.new(A)]]
=> [[#, #, #], [#, #, #], [#, #, #]]
irb(main):017:0> first_row = myAr[0]
=> [#, #, #]
irb(main):018:0> Y = “Y”
=> “Y”
irb(main):019:0> first_row[2].value = Y
=> “Y”
irb(main):020:0> myAr
=> [[#, #, #], [#, #, #], [#, #, #]]

So by changing the value of the object pointed to by first_row[0], you
are really changing the same object that is referenced in the original
array. Don’t know if this is convenient for you or not. Probably
someone will come up with a better idea.

Hope this helps,

Jesus.

On Apr 7, 8:50 am, Ruby S. [email protected] wrote:

sAr0 (sub array row 0 to row n, where n is 3 for this case)
sAr0 = [A, B, C, D]
sAr1 = [B, A, C, D]
sAr2 = [D, C, B, A]
sAr3 = [C, A, D, B]

I suggest you use the Matrix class (in the standard library).

Though for the row case, you don’t need anything special:
sAr0 = mA[0] = [A, B, C, D]
sAr1 = mA[1] = [B, A, C, D]
sAr2 = mA[2] = [D, C, B, A]
sAr3 = mA[3] = [C, A, D, B]
If you change sAr0, it will be reflected in mA[0].

– Mark.

On 07.04.2009 15:38, Mark T. wrote:

Sub Arrays:
sAr0 (sub array row 0 to row n, where n is 3 for this case)
sAr0 = [A, B, C, D]
sAr1 = [B, A, C, D]
sAr2 = [D, C, B, A]
sAr3 = [C, A, D, B]

I suggest you use the Matrix class (in the standard library).

Are you sure this works? It seems, when I create a row Vector of the
Matrix it is read only. At least []= is defined private.

But I agree to the general advice to use a special class for this and
not try to work with nested Arrays. That’s what OO is for. Defining a
two dimensional matrix with Vector proxies isn’t too hard.

Kind regards

robert

On Tue, Apr 7, 2009 at 11:59 AM, Robert K.
[email protected]wrote:

[C, A, D, B]
I suggest you use the Matrix class (in the standard library).

   robert

Thank you all for your input and suggestions!

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