Forum: Ruby Ruby Hash Querying

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
305a6311b8b926f862288a831ef79a3f?d=identicon&s=25 kwest (Guest)
on 2007-06-13 20:36
(Received via mailing list)
Hello,
I am new to Ruby and have run into a small snag. I have a hash like
so:

@documentnames = {
  :finance_whitepaper => 'whitepaper one',
  :ecommerce_whitepaper => 'whitepaper two',
  :integratedsvs_datasheet => 'whitepaper three'
  }



So I am trying to then go like so:

@documentnames[k]

where k is a variable in a loop with the key from the has minus the
":" in front

But if I try to add the ":" in front

<%key = ':' + k%>

And then try to reference the element

<%= @documentnames[key] %>

I get a null value....
305a6311b8b926f862288a831ef79a3f?d=identicon&s=25 kwest (Guest)
on 2007-06-13 20:41
(Received via mailing list)
OK I answered my own question...sorry. But here is the answer in case
someone else asks the same silly question:

Use a string as a key (doh!)

@documentnames = {
   'finance_whitepaper' => 'whitepaper one',
   'ecommerce_whitepaper' => 'whitepaper two',
   'integratedsvs_datasheet' => 'whitepaper three'
  }

Problem solved!
439c401f95ee2fac0be4c1727dd74dea?d=identicon&s=25 Bira (Guest)
on 2007-06-13 20:45
(Received via mailing list)
On 6/13/07, kwest <kwestin@gmail.com> wrote:
>
> <%key = ':' + k%>
>
> And then try to reference the element
>
> <%= @documentnames[key] %>
>
> I get a null value....

That happens because the keys are symbols, and not strings starting
with ":". Try either using strings instead of symbols as hash keys
(i.e., 'finance_whitepaper' rather than :finance_whitepaper - note que
quotes) or using k.to_sym inside the loop.
C1ea21aea0e1eaf7f55ed48b833e61e1?d=identicon&s=25 Daniel Kempkens (Guest)
on 2007-06-13 20:47
(Received via mailing list)
kwest schrieb:
>
> <%key = ':' + k%>
>
> And then try to reference the element
>
> <%= @documentnames[key] %>
>
> I get a null value....
>

The ":whatever" is a Ruby-Symbol, and you're trying to kinda "fake" it
with a String. However, the answer is really easy, just use:
@documentnames[k.to_sym]
305a6311b8b926f862288a831ef79a3f?d=identicon&s=25 kwest (Guest)
on 2007-06-13 21:01
(Received via mailing list)
Great thank you. That is too easy. I am liking this.

On Jun 13, 11:36 am, Daniel Kempkens <Daniel.Kempk...@gmail.com>
This topic is locked and can not be replied to.