[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

n-dimensional array in Ruby

Christian

11/1/2008 12:08:00 AM

Hi,

i have a little Java problem, I want to solve using Ruby. Therefor I
need an n-dimensional array. In Java it looks like this:

double dArray[][][] = new double[x.length()+1][y.length()+1][x.length()
+y.length()+3];
dArray[0][0][0] = 0;
dArray[0][0][1] = POSITIVE_INFINITY;

Further values will be computed through loops and written into the
array.

How do I initialize such an array in Ruby?
6 Answers

Michael Guterl

11/1/2008 12:30:00 AM

0

On Fri, Oct 31, 2008 at 8:09 PM, Christian <stadeschuldt@googlemail.com> wrote:
> Hi,
>
> i have a little Java problem, I want to solve using Ruby. Therefor I
> need an n-dimensional array. In Java it looks like this:
>
> double dArray[][][] = new double[x.length()+1][y.length()+1][x.length()
> +y.length()+3];
> dArray[0][0][0] = 0;
> dArray[0][0][1] = POSITIVE_INFINITY;
>
> Further values will be computed through loops and written into the
> array.
>
> How do I initialize such an array in Ruby?
>
Infinity = 1.0/0

a = [[],[],[]]
a[0][0][0] = 0
a[0][0][1] = Infinity

The arrays will grow to whatever size you need them to.

HTH,
Michael Guterl

Mike Gold

11/1/2008 12:45:00 AM

0

Christian wrote:
> i have a little Java problem, I want to solve using Ruby. Therefor I
> need an n-dimensional array.

def Array.multi(*dimensions)
dimensions.reverse.inject(nil) { |result, dim|
Array.new(dim) { result ? result.dup : nil }
}
end

a = Array.multi(3, 4, 5)

p a[0] #=> [[nil, nil, ...], ... ]
p a[0][0] #=> [nil, nil, nil, nil, nil]

a[0][0][0] = :fred
a[2][3][4] = :barney

p a[0][0][0] #=> :fred
p a[2][3][4] #=> :barney

a[3][0][0]
# => exception: undefined method `[]' for nil; index past dim size
--
Posted via http://www.ruby-....

Mike Gold

11/1/2008 9:04:00 AM

0

Mike Gold wrote:
> def Array.multi(*dimensions)
> dimensions.reverse.inject(nil) { |result, dim|
> Array.new(dim) { result ? result.dup : nil }
> }
> end

My mistake. Array#dup is not a recursive deep copy.

def Array.multi(*dimensions)
dimensions.reverse.inject(nil) { |result, dim|
Array.new(dim) { Marshal.load(Marshal.dump(result)) }
}
end
--
Posted via http://www.ruby-....

Brian Adkins

11/1/2008 4:43:00 PM

0

Michael Guterl <mguterl@gmail.com> writes:

> On Fri, Oct 31, 2008 at 8:09 PM, Christian <stadeschuldt@googlemail.com> wrote:
>> Hi,
>>
>> i have a little Java problem, I want to solve using Ruby. Therefor I
>> need an n-dimensional array. In Java it looks like this:
>>
>> double dArray[][][] = new double[x.length()+1][y.length()+1][x.length()
>> +y.length()+3];
>> dArray[0][0][0] = 0;
>> dArray[0][0][1] = POSITIVE_INFINITY;
>>
>> Further values will be computed through loops and written into the
>> array.
>>
>> How do I initialize such an array in Ruby?
>>
> Infinity = 1.0/0

~$ irb
irb(main):001:0> X = 7
=> 7
irb(main):002:0> Infinity = 1.0/0
=> Infinity
irb(main):003:0> 0 / Infinity
=> 0.0
irb(main):004:0> Infinity * Infinity
=> Infinity
irb(main):005:0> Beyond = Infinity
=> Infinity
irb(main):006:0> 2 * Infinity and Beyond
=> Infinity
irb(main):007:0> Infinity.infinite?
=> 1

Cool - I just learned about Infinity in Ruby. Hey Dave Thomas, maybe
you could add a bit about Infinity in the next relase of Programming
Ruby or Programming Ruby 1.9

>
> a = [[],[],[]]
> a[0][0][0] = 0
> a[0][0][1] = Infinity
>
> The arrays will grow to whatever size you need them to.
>
> HTH,
> Michael Guterl

Brian Adkins

11/1/2008 4:44:00 PM

0

Mike Gold <mike.gold.4433@gmail.com> writes:

> Mike Gold wrote:
>> def Array.multi(*dimensions)
>> dimensions.reverse.inject(nil) { |result, dim|
>> Array.new(dim) { result ? result.dup : nil }
>> }
>> end
>
> My mistake. Array#dup is not a recursive deep copy.
>
> def Array.multi(*dimensions)
> dimensions.reverse.inject(nil) { |result, dim|
> Array.new(dim) { Marshal.load(Marshal.dump(result)) }
> }
> end

Yearning for macros...

Michael Guterl

11/1/2008 5:03:00 PM

0

On Sat, Nov 1, 2008 at 12:43 PM, Brian Adkins <lojicdotcom@gmail.com> wrote:
> Michael Guterl <mguterl@gmail.com> writes:
>
>> On Fri, Oct 31, 2008 at 8:09 PM, Christian <stadeschuldt@googlemail.com> wrote:
>>> Hi,
>>>
>>> i have a little Java problem, I want to solve using Ruby. Therefor I
>>> need an n-dimensional array. In Java it looks like this:
>>>
>>> double dArray[][][] = new double[x.length()+1][y.length()+1][x.length()
>>> +y.length()+3];
>>> dArray[0][0][0] = 0;
>>> dArray[0][0][1] = POSITIVE_INFINITY;
>>>
>>> Further values will be computed through loops and written into the
>>> array.
>>>
>>> How do I initialize such an array in Ruby?
>>>
>> Infinity = 1.0/0
>
> ~$ irb
> irb(main):001:0> X = 7
> => 7
> irb(main):002:0> Infinity = 1.0/0
> => Infinity
> irb(main):003:0> 0 / Infinity
> => 0.0
> irb(main):004:0> Infinity * Infinity
> => Infinity
> irb(main):005:0> Beyond = Infinity
> => Infinity
> irb(main):006:0> 2 * Infinity and Beyond
> => Infinity
> irb(main):007:0> Infinity.infinite?
> => 1
>
> Cool - I just learned about Infinity in Ruby. Hey Dave Thomas, maybe
> you could add a bit about Infinity in the next relase of Programming
> Ruby or Programming Ruby 1.9
>
Yeah, I don't think I've seen it discussed in any books before, but I
could be wrong.

I stumbled upon it accidentally one day when playing with ruby and
it's rules for division.

Michael Guterl