[#399938] how to read arrary with an array — "Richard D." <lists@...>

Hello. I believe this is basic question, but I'm just starting to learn

19 messages 2012/10/02

[#400050] img src while sending email ruby cgi — Ferdous ara <lists@...>

Hi

16 messages 2012/10/05

[#400351] Drop 1st and last particular character — ajay paswan <lists@...>

What is the most efficient way to drop '#' from the first place and last

15 messages 2012/10/16

[#400374] database part of a desktop application — "Sebastjan H." <lists@...>

Hi,

14 messages 2012/10/16
[#400375] Re: database part of a desktop application — Chad Perrin <code@...> 2012/10/16

On Wed, Oct 17, 2012 at 05:28:39AM +0900, Sebastjan H. wrote:

[#400377] Re: database part of a desktop application — sto.mar@... 2012/10/17

Am 16.10.2012 23:24, schrieb Chad Perrin:

[#400389] Re: database part of a desktop application — Chad Perrin <code@...> 2012/10/17

On Wed, Oct 17, 2012 at 01:39:21PM +0900, sto.mar@web.de wrote:

[#400386] Unable to send attachment, and dealing with multiple attachment — ajay paswan <lists@...>

Hi,

11 messages 2012/10/17

[#400454] Hash with Integer key issue — Wayne Simmerson <lists@...>

Hi Im new to Ruby and am getting some unexpected results from a

18 messages 2012/10/19

[#400535] Name/symbol/object type clash? What is happening here? — Todd Benson <caduceass@...>

It's nonsense code, but I'm curious as to what is going on behind the scenes...

41 messages 2012/10/23

[#400556] Calling a method foo() or an object foo.method_call_here - both — Marc Heiler <lists@...>

Hello.

13 messages 2012/10/24

[#400650] OpenSSL ECDSA public key from private — Nokan Emiro <uzleepito@...>

Hi,

11 messages 2012/10/27

[#400680] Passing folder as argument ARGV? — Joz Private <lists@...>

Is there an easy way to pass multiple files on the command line?

15 messages 2012/10/28
[#400681] Re: Passing folder as argument ARGV? — brad smith <bradleydsmith@...> 2012/10/28

How are you traversing the directory you pass in on the command line ?

[#400697] File.readable? and /proc — Jeff Moore <lists@...>

root@nail:/projects/proc_fs# uname -a

13 messages 2012/10/28

[#400714] Marshal.load weird issue — "Pierre J." <lists@...>

Hi guys

12 messages 2012/10/28

[#400781] bug?: local variable created in if modifier not available in modified expression — "Mean L." <lists@...>

irb(main):001:0> local1 if local1 = "created"

21 messages 2012/10/30
[#400807] Re: bug?: local variable created in if modifier not available in modified expression — Bartosz Dziewoński <matma.rex@...> 2012/10/31

Oh, and in case it wasn't apparent: you can just add

[#400808] Re: bug?: local variable created in if modifier not available in modified expression — Eliezer Croitoru <eliezer@...> 2012/10/31

On 10/31/2012 4:52 PM, Bartosz Dziewoナгki wrote:

[#400809] Re: bug?: local variable created in if modifier not available in modified expression — Robert Klemme <shortcutter@...> 2012/10/31

On Wed, Oct 31, 2012 at 4:28 PM, Eliezer Croitoru <eliezer@ngtech.co.il>wrote:

[#400784] REXML & HTMLentities incorrectly map to UTF-8 — "Mark S." <lists@...>

I have some XML data (UTF 8) that I'm trying to convert into another XML

13 messages 2012/10/30

Re: how to read arrary with an array

From: Jes俍 Gabriel y Gal疣 <jgabrielygalan@...>
Date: 2012-10-02 15:57:01 UTC
List: ruby-talk #399960
On Tue, Oct 2, 2012 at 5:35 PM, Richard D. <lists@ruby-forum.com> wrote:
> after some experimenting, I understand but still have a bit of fog.
> Basically, the idea was to see how data would be pulled from slight
> different arrays.  But I'm getting two completely different results.  I
> was expecting to be the same, except my "=====" break to tell the
> different outputs.
>
> program 1
> --------------------------------------------------------------------
> array1 = [['a','b'],[1, 2],['x','y']]
> array2 = ['a',[1,2],'x']
>
> array1.each do |ray|
>   test1 = ray[0]
>   puts test1
> end
> puts '======='
>
> array1.each do |ray|
>   test2 = ray[1]
>   puts test2
> end
> puts '======='
> array2.each do |ray2|
>   test3 = ray2[0]
>   puts test3
> end
> puts '====='
> array2.each do |ray2|
>   test4 = ray2[1]
>   puts test4
> end
> puts '====='
> puts array1[0].to_s + ' ' + array2[0].to_s
> puts
> puts array1[1].to_s + ' ' + array2[1].to_s
> puts
> puts array1[2].to_s + ' ' + array2[2].to_s
>
> OUTPUT
> a
> 1
> x
> ====
> b
> 2
> y
> ====
> a
> 1
> x
> ====
>
> 2
>
> =====
> ["a","b"] a
>
> [1, 2] [1, 2]
>
> ["x", "y"] x
>
> Program 2
> ------------------------------------------------------------------
> {same as above, excpet)
> array1.each do |ray|
>   test1 = ray[0]
>   test2 = ray[1]
>   puts test1
>   puts '****'
>   puts test2
> end
> puts '======='
> array2.each do |ray2|
>   test3 = ray2[0]
>   test4 = ray2[1]
>   puts test3
>   puts '****'
>   puts test4
> end
>
> OUTPUT
> a
> ****
> b
> 1
> ****
> 2
> x
> ****
> y
> =====
> a
> ****
>
> 1
> ****
> 2
> x
> ****
>
> ======
> ["a","b"] a
>
> [1, 2] [1, 2]
>
> ["x", "y"] x
>
> So I think I got what the arrays do.  I just don't think I'm
> understanding how things are being located.  What I"m thinking is this
> array1 = [['a','b'],[1, 2],['x','y']]
> array1: a is slot0-0, b is slot0-1, 1 is slot1-0, 2 is slot 1-1, x is
> slot2-0, and y is slot 2-1
> array2 = ['a',[1,2],'x']
> a is slot1-0-0, 1 is 1-0, 2 is 1-1, and x is 2-0
>
> I thought in both programs the ray(x)[0] would output all x-0 slots, and
> ray(x)[1] would out put all -1 slots

The reason is that your metaphor about arrays being like a 2x2 matrix
is wrong, specially in the cases where the contents of the array are
not arrays themselves. It's better if you think of it this way:

array1 = [['a','b'],[1, 2],['x','y']]

array1 is an array with three elements, with indexes 0, 1 and 2. At
index 0, there is an object, which happens to be another array. At
index 1 there is an object that happens to be another array. The same
for index 2. So:

first_array = array1[0]

first array is now ['a', 'b'], which is an array. At position 0 there
is a String object, so first_array[0]  => 'a'. At position 1 there's
another string, so first_array[1] => 'b'

The confusion might come because you can "chain" method calls like this:

array1[0][0] #=> 'a'

but in reality this are two different steps. First, method [] with
argument 0 is called on array1. This returns a different array. Then,
method [] with argument 0 is called on the returned array. This method
call returns a String, which is 'a'.

When you move to array2, though, your assumptions break, because:

array2 = ['a', [1,2], 'x']

array2[0] calls method [] on the array, with argument 0, which returns
the first object of the array. It happens that in this case, this
object is not an array, but the string 'a'. You have the object
directly when you do that. This is not a 2x2 array. It's just an array
in which the second element is itself an array, but that's not the
case for the first or third objects, which are just strings. So:

array2[0] => 'a', a String

If you do

array2[0][0], this calls method [] with argument 0 of the array,
returning a String. You then call method [] with argument 0 of the
String (yes, String also has a method [], which returns a section of
the string), in this case returning 'a', because you asked for the
first character of the String.

Later in the code, you do array2[0][1], which is thus calling the
method [] with argument 1 on the string 'a', which is asking the
string for the second character, which doesn't exist, and so you get
nil (empty when puts'ed).

You should play a little bit in irb to see the different steps.

Jesus.

In This Thread