I am having the most insane time with Ruby’s Hash class.
I have Array’s of varied length, but whenever they are stored and then
retrieved from a Hash they become length of 1 and all the values are
somehow combined in that first cell.
Code:
aRay = [“a”,“b”,“c”]
aRay2 = [“1”,“2”,“3”,“4”,“5”]
prints out 3
puts aRay.size
prints out 5
puts aRay2.size
store them
h = {“letters” => aRay, “numbers” => aRay2}
prints out abc
puts h.values_at(“letters”).to_s
prints out 12345
puts h.values_at(“numbers”).to_s
retrieve the arrays
ltrArray = h.values_at(“letters”)
numArray = h.values_at(“numbers”)
prints out abc
puts ltrArray.to_s
prints out 12345
puts numArray.to_s
prints out 1
puts ltrArray.size
prints out 1
puts numArray.size
What am I doing wrong?
On 23 nov. 08, at 15:13, John B. wrote:
puts h.values_at(“letters”).to_s
Hash#values_at returns an array of the requested values, so in your
case you get an array of array(s).
What you want is:
ltrArray = h.values_at(“letters”).first
numArray = h.values_at(“numbers”).first
Alle Sunday 23 November 2008, John B. ha scritto:
prints out 12345
prints out 1
puts ltrArray.size
prints out 1
puts numArray.size
What am I doing wrong?
Try replacing lines like
puts ltrArray.to_s
with
p ltrArray
and you’ll understand what’s happening.
By the way, you don’t need to add the .to_s to the argument of a call to
puts
(or p), as puts will do that for you. Also, to display the contents of
hashes
and arrays, the inspect (and the associated p) method may be more useful
than
the to_s (and associated puts) method.
Stefano
On 23.11.2008 15:24, John B. wrote:
Luc H. wrote:
What you want is:
ltrArray = h.values_at(“letters”).first
numArray = h.values_at(“numbers”).first
Oh wow…I’ve been plugging away at this for 4 hours now and that just
fixed my problem. Thank you so much!
I’m in the process of learning Ruby through various online mediums so I
tend to miss little intricacies like that.
A good tool to try these things out is irb which comes with your Ruby
distribution. Since irb by default uses #inspect (the same that method
“p” uses) to print out objects you can immediately see what’s going on.
Kind regards
robert
Luc H. wrote:
What you want is:
ltrArray = h.values_at(“letters”).first
numArray = h.values_at(“numbers”).first
Oh wow…I’ve been plugging away at this for 4 hours now and that just
fixed my problem. Thank you so much!
I’m in the process of learning Ruby through various online mediums so I
tend to miss little intricacies like that.
Thanks again.