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.
kwest (Guest)
on 2007-06-13 22: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....
kwest (Guest)
on 2007-06-13 22: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!
Bira (Guest)
on 2007-06-13 22:45
(Received via mailing list)
On 6/13/07, kwest <removed_email_address@domain.invalid> 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.
Daniel K. (Guest)
on 2007-06-13 22: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]
kwest (Guest)
on 2007-06-13 23:01
(Received via mailing list)
Great thank you. That is too easy. I am liking this.

On Jun 13, 11:36 am, Daniel K. <removed_email_address@domain.invalid>
This topic is locked and can not be replied to.