What am I doing wrong! Arrays


T

Tj Superfly

title = "word word1 word2 word3 word4 word5 word6 word7 word8 word9
word10 word11 word12 word13"

array = title.split

if(array.length == "12")
puts array[0]
elsif(array.length == "13")
puts array[1].to_s + " " + array[2].to_s
elsif(array.length == "14")
puts array[1].to_s + " " + array[2].to_s + " " + array[3].to_s
end

My output should be "word1 word2" but I'm getting nothing.

What am I overlooking? I've tried everything I know, can anyone help?

Regards,

TJ
 
Ad

Advertisements

D

Daniel Sheppard

title =3D "word word1 word2 word3 word4 word5 word6 word7 word8 =
word9
word10 word11 word12 word13"
=20
array =3D title.split
=20
if(array.length =3D=3D "12")
puts array[0]
elsif(array.length =3D=3D "13")
puts array[1].to_s + " " + array[2].to_s
elsif(array.length =3D=3D "14")
puts array[1].to_s + " " + array[2].to_s + " " + array[3].to_s
end
=20
My output should be "word1 word2" but I'm getting nothing.
=20
What am I overlooking? I've tried everything I know, can anyone help?

12 =3D=3D "12" is going to be false.=20

Dan.
 
T

Tj Superfly

I thought of that too, but when I added the line:

twelve = "12" and then changed it to array.length == twelve it does the
same thing.

I'm still really confused at such a simple task. D:
 
T

thomas peklak

Just do it this way and it should work:

if(array.length == 12)
puts array[0]
elsif(array.length == 13)
puts array[1].to_s + " " + array[2].to_s
elsif(array.length == 14)
puts array[1].to_s + " " + array[2].to_s + " " + array[3].to_s
end
 
S

Sebastian Hungerecker

Tj said:
twelve = "12" and then changed it to array.length == twelve it does the
same thing.

You're still compating array.length to "12", but Array#length returns
an integer, not a string. "12" is a string. array.length will return
12 and as Daniel said 12 == "12" is false. Whether you assign "12" to
a variable first or not.

HTH,
Sebastian
 
K

krusty.ar

  title = "word word1 word2 word3 word4 word5 word6 word7 word8 word9
word10 word11 word12 word13"

  array = title.split

  if(array.length == "12")
    puts array[0]
  elsif(array.length == "13")
    puts array[1].to_s + " " + array[2].to_s
  elsif(array.length == "14")
    puts array[1].to_s + " " + array[2].to_s + " " + array[3].to_s
  end

My output should be "word1 word2" but I'm getting nothing.

What am I overlooking? I've tried everything I know, can anyone help?

The previous mails have nailed the problem, but your array length is
14, so the output should be "wiord1 word2 word3"


Lucas.
 
Ad

Advertisements

F

Florian Gilcher

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Are you a PHP programmer by trade?

That a typical PHP behaviour, because PHP casts Strings to Ints before
comparing. This can be confusing. (Although they sell it as "good
usability") Ruby does not know implicit casts and thus 11 != "11".
Ruby is not as lax as PHP when it comes to types.

(Fun fact. Did you know that 11 == "11abcde"? Ask PHP. Second FF: Did
you know that a variable containing 0 or "0" is empty()?)

Regards,
Florian Gilcher

You're still compating array.length to "12", but Array#length returns
an integer, not a string. "12" is a string. array.length will return
12 and as Daniel said 12 == "12" is false. Whether you assign "12" to
a variable first or not.

HTH,
Sebastian

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)

iEYEARECAAYFAkho32gACgkQJA/zY0IIRZYvewCeLtepLFf1XWzb9tQMsNFWozzR
g6oAoLGQhz4CyFJfmN1VWBRdeBlSZlFx
=zsUH
-----END PGP SIGNATURE-----
 
Ad

Advertisements

D

Dave Bass

Florian said:
That a typical PHP behaviour, because PHP casts Strings to Ints before
comparing.

Similar thing with Perl. Perl scalars can be numbers or strings,
depending on the context. Sometimes you have to force them to be one or
the other; e.g. adding 0 to a scalar makes it more number-like;
appending an empty string "" makes it more string-like. But generally it
behaves in a sensible way.

Comparing a string to an integer is a typical gotcha for us ex-Perlers.

Dave
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top